加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-01-20 16:08:16 所属栏目:MySql教程 来源:网络整理
导读:当我创建一个SQL Time列时,我得到了一个纯时间,即.未注明日期的.但是当我使用Ruby Time类时,我也会得到一个日期.问题是何时“查找”生成的SQL包含日期,而我似乎得到了奇怪的结果. 桌子 start_date: timeend_time: timeday_of_week: string 活动记录 def se

当我创建一个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

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读