gpt4 book ai didi

mysql - 为什么 ActiveRecord 生成的 SQL 包含时间列的日期?

转载 作者:可可西里 更新时间:2023-11-01 08:23:11 26 4
gpt4 key购买 nike

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

表格

start_date: time
end_time: time
day_of_week: string

ActiveRecord

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 2-ish

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

rails 3

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

然后在你的取景器中,这样做:

def self.now_playing
time = Time.now
self.find(:first, :conditions => ['day_of_week = ? AND end_time > ? AND start_time < ?', 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 - 为什么 ActiveRecord 生成的 SQL 包含时间列的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com