Почему существует несоответствие между ActiveRecord SQL и PL / SQL Developer SQL? - PullRequest
0 голосов
/ 07 мая 2009

У меня есть оператор выбора в Oracle PL / SQL Developer, который извлекает значения на основе даты:

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.

Есть идеи? Спасибо

Ответы [ 2 ]

2 голосов
/ 07 мая 2009

Учитывая ваш собственный взлом и имя столбца create-DATE, я подозреваю, что create-date будет столбцом DATE. Oracle достаточно «дружественен», чтобы не вызывать ошибку при выполнении to_date столбца даты, но было бы лучше, если бы он вызвал ошибку Таким образом, правильное решение будет (как в ORACLE! Как в ActiveRecord):

select * from <table> where create_date = to_date('20090506', 'YYYYMMDD')

Вкратце: не используйте to_date () в столбце даты.

0 голосов
/ 07 мая 2009

Ну, это мой хак. Я не горжусь этим, но это сработает. Любые лучшие ответы, которые действительно относятся к типам Ruby / Oracle Date, были бы лучше, на мой взгляд.

Table.find_by_sql("
  select * from <table>
  where to_char(create_date, 'YYYY-MM-DD') = '2009-05-06'
")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...