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')"