用于按日期间隔选择记录的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
感谢您的帮助。
答案 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数据类型。取决于您的用例。