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 服务器的配置和版本号信...
&gt; [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...