2014-09-18 1 views
0

Я пытаюсь запросить sum_date WHERE sum_date BETWEEN (sysdate-1) AND (sysdate-30)Сравнивая даты VARCHAR с SYSDATE

В моем SELECT заявлении я попытался TO_DATE(sum_date, 'DD-MM-YY') и sysdate

Но он бросает ошибку:

"literal does not match format string."

  • Sum_date хранится в varchar20 и выглядит как 2014-01-07.
  • sysdate выглядит как 18-SEP-14.
+3

Тест TO_DATE (sum_date, «гггг -mm-дд ') – Aramillo

ответ

3

Ваш формат 'YYYY-MM-DD', так:

SELECT * 
FROM my_table 
WHERE TO_DATE(sum_date, 'YYYY-MM-DD') 
     BETWEEN (sysdate - 30) AND (sysdate - 1) 
0

Вы можете также изменить NLS_DATE_FORMAT вашей сессии, чтобы соответствовать вашим потребностям:

 
alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD'; 

create table y 
    (y varchar2(10)); 
    select y.*, rowid from y 
; 

select * from y where y between sysdate -10000 and sysdate +100000; 
select * from y where to_date(y,'YYYY-MM-DD') between '2010-04-01' and '2016-04-01' ;