我在Oracle PL / SQL Developer中有一个select语句,它根据日期检索值:
select * from <table> where to_date(create_date) = to_date('20090506', 'YYYYMMDD')
其中create_date
是Oracle类型的日期。这将返回一个非空的集合。但是,在ActiveRecord中:
<Table>.find_by_sql("select * from <table> where to_date(create_date) = to_date('20090506', 'YYYYMMDD')")
不返回任何行,这是不正确的。我怀疑它与ActiveRecord如何处理Time / Date / DateTime对象有关。
有什么想法吗? 感谢
答案 0 :(得分:2)
鉴于你自己的'hack'和列名create-DATE,我怀疑create-date是DATE列。当你执行日期列的to_date时,Oracle“友好”不足以引发错误,但如果它确实引发错误会更好。 所以正确的解决方案是(在ORACLE!中,就像在ActiveRecord中一样):
select * from <table> where create_date = to_date('20090506', 'YYYYMMDD')
简而言之:不要在日期列上使用to_date()。
答案 1 :(得分:0)
这是我的黑客。我并不以此为荣,但它会起作用。在我看来,实际上坚持使用Ruby / Oracle Date类型的任何更好的答案都会更好。
Table.find_by_sql("
select * from <table>
where to_char(create_date, 'YYYY-MM-DD') = '2009-05-06'
")