2017-07-24 31 views
0

Ruby代码按日期间隔选择记录:Oracle日期错误ORA-01830

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错误:

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

'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数据类型。取决于你的用例。