mysql-为什么ActiveRecord生成的SQL的Time列包含Date?

前端之家收集整理的这篇文章主要介绍了mysql-为什么ActiveRecord生成的SQL的Time列包含Date? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当我创建一个sql Time列时,我得到了一个纯时间,即.未注明日期的.但是当我使用Ruby Time类时,我也会得到一个日期.问题是何时“查找”生成sql包含日期,而我似乎得到了奇怪的结果.

桌子

start_date: time
end_time: time
day_of_week: string

活动记录

def self.now_playing
    self.find(:first,:conditions => ['day_of_week = ? AND end_time > ? AND start_time < ?',Time.now.strftime('%A'),Time.now,Time.now])
end

sql

SELECT * FROM `schedules` WHERE (day_of_week = 'Saturday' AND end_time > '2009-06-20 10:19:59' AND start_time < '2009-06-20 10:19:59') LIMIT 1

生成sql包含一个日期,这可能就是为什么我得到奇怪结果的原因,例如在给定时间有时间表时没有记录返回的原因吗?但是,如果该列是纯时间列,MysqL应该不忽略日期部分吗?

最佳答案
Ruby中的时间更像是时间戳记……总是有一个日期. ActiveSupport对此具有内置的转换,因此,如果日期不正确,您可以使用#to_s(:format)获得所需的结果.默认情况下,有一个:time选项,但它仅返回小时/分钟(%H:%M),如果还需要几秒钟,则必须添加另一种格式…

创建一个名为time_formats.rb的初始化程序或添加以下内容

Rails 2ish

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!({
  :time_long => "%H:%M:%S"
})

导轨3

Time::DATE_FORMATS.merge!(
  :time_long => "%H:%M:%S"
)

然后在您的取景器中,就像这样:

def self.now_playing
  time = Time.now
  self.find(:first,time.strftime('%A'),time.to_s(:time_long),time.to_s(:time_long)])
end

可以在这里找到更多信息:http://jasonseifer.com/2010/03/10/rails-date-formats

或这里:http://brian.rarevisions.net/extending-date-formats-in-rails-3

猜你在找的MySQL相关文章