2015-04-19 2 views
0

У меня есть команды, как показано ниже:сравнить DateTime в оракула

to_char(to_date('req_date','yyyy/mm/dd'),'yyyymmdd) > '20140401'; is success 

Но после того, когда я изменил год с 2014 по 2015 год, имеют формат строки ошибки. Как ниже

to_char(to_date('req_date','yyyy/mm/dd'),'yyyymmdd) > '20150401'; 

Я не знаю, что это исправление error.Let для меня. Благодаря для всех

+2

Они не являются на самом деле ваши команды, они? По крайней мере одна цитата отсутствует, а 'req_date' цитируется, поэтому это не действительная дата. Скопируйте и вставьте фактические команды. – RealSkeptic

+1

Никогда не используйте TO_DATE в DATE, он будет неявно преобразовывать его в строку, а затем обратно к дате, используя формат NLS, специфичный для локали. См. Это http://stackoverflow.com/a/29559609/3989608 –

ответ

0

to_char (TO_DATE ('req_date', 'гггг/мм/дд'), 'ггггммдд)> '20140401';

  1. 'req_date' не дата, это строка. Вам не нужны однокамерные кавычки, используйте столбец даты как есть.

  2. Никогда не используйте TO_DATE на ДАТЕ, она будет неявно преобразовать его в строку, а затем обратно на сегодняшний день, используя локализованный формат NLS. См. Мой ответ здесь. https://stackoverflow.com/a/29559609/3989608

  3. Самое ценное, что вы сравниваете два STRINGS. Вам необходимо сравнить DATE s. Вы должны оставить дату так же, как и для вычислений DATE. TO_CHAR предназначен для отображения, а TO_DATE - это преобразование строкового литерала в DATE.

Итак, вам нужно сделать сравнение даты как:

req_date > to_date('20140401','YYYYMMDD') 
Смежные вопросы