Oracle日期错误ORA-01830

时间:2017-07-24 12:24:49

标签: ruby-on-rails ruby oracle

用于按日期间隔选择记录的Ruby代码:

monthly_activity = activity.trn_activity_items.find_by(
  'month >= ? AND month < ?',
  activity.daily_stat_date.beginning_of_month,
  activity.daily_stat_date.end_of_month
)

所有在mysql和postgres上工作正常,但Oracle似乎不喜欢什么,我无法理解究竟是什么。

Oracle错误:

OCIError: ORA-01830: date format picture ends before converting entire input string: SELECT  "TRN_ACTIVITY_ITEMS".* FROM "TRN_ACTIVITY_ITEMS" WHERE "TRN_ACTIVITY_ITEMS"."TRN_ACTIVITY_ID" = :a1 AND (month >= '2017-07-01 00:00:00' AND month < '2017-07-31 23:59:59.999999') AND ROWNUM <= :a2

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  

'2017-07-31 23:59:59.999999'

Oracle日期没有小数秒(虽然时间戳有)。所以你的查询应该是这样的:

AND month <= '2017-07-31 23:59:59')

虽然如果你想保持与其他数据库的兼容性,你可能不想使用小于或等于,在这种情况下你应该指定上限为

AND month < '2017-08-01 00:00:00'

或者,您可以更改列声明,使其具有timestamp数据类型。取决于您的用例。