railsで開発環境ではsqlite3を使って本番環境はMySQLとかPostgreSQLを 使用している人も多いと思いますが、sqliteって結構使えない関数とか あるんですよね〜。 タイムスタンプをto_charで年月でgroupしようとしたらsqliteにto_charが なかったのでちょっとしたメソッドを作ってみました。 こういうのをまとめたpluginとかないかな〜〜

@@to_char_strftime_list = [ # 2009-01-06 22:18:33 [:y, ['YYYY', '%Y']], # 2009 [:m, ['MM', '%m']], # 01 [:d, ['DD', '%d']], # 06 [:h, ['hh24' '%H']], # 22 [:mi,['MI', '%M']], # 18 [:s, ['SS', '%S']] # 33 ] def to_char_or_strftime(column, format) i = 0 i = 1 if ActiveRecord::Base.connection.adapter_name.downcase == 'sqlite' @@to_char_strftime_list.map do |value| format.gsub!(/#{value[0].to_s}/, value[1][i].to_s) end if i == 0 sql = "to_char(#{column}, '#{format}')" else sql = "strftime('#{format}', #{column})" end return sql end --- to_char_or_strftime('users.created_at', 'ym') [sqlite3]=>"strftime('%Y%m', users.created_at)" [mysql,pgsql]=>"to_char(users.created_at, 'YYYYMM')"