2012-02-05 3 views
6

У меня есть столбец типа «DATE», и я хочу запустить запрос, сравнивая его с sysdate.Сравнение даты с sysdate в oracle

Но я получаю следующую ошибку, может кто-нибудь, пожалуйста, дайте мне знать, чего я здесь не хватает?

SQL> select distinct file_name as r 
    from table_1 
    where view_day >= TO_DATE(SYSDATE-10, 'YYYY/MM/DD'); 

ERROR at line 1: 
ORA-01858: a non-numeric character was found where a numeric was expected 
+0

Если один из этих ответов помогли вам с решением, пожалуйста, зеленый знак его. –

ответ

0

Ошибка показывает, что VIEW_DAY столбец VARCHAR, так что вам нужно преобразовать DATE в строку. Используйте TO_CHAR или конвертируйте VIEW_DAY на сегодняшний день.

+1

Нет. view_date имеет тип DATE – TopCoder

+2

@TopCoder - я предполагаю! Посмотрите - http://www.orafaq.com/wiki/ORA-01858 – adatapost

+0

Спасибо! Ты прав. Формат даты по умолчанию для view_date и sysdate в моей системе был установлен как DD-MON-YYYY. Изменение формата для того же помогло! – TopCoder

14

Вы не должны использовать to_date для даты, To_date предназначен для кастования varchar на сегодняшний день, а не даты.
Если вы используете функцию to_date в дате, тогда оракул будет ссылаться на нее как строку в соответствии с nls_date_format, которая может различаться в разных средах.
Как сказал @jonearles, если вы хотите, чтобы удалить время в SYSDATE затем использовать TRUNC

+1

+1 для "не использовать to_date в столбцах даты". –

6

ИСПОЛЬЗОВАНИЕ:

select distinct file_name as r 
from table_1 
where view_day >= TRUNC(SYSDATE-10) 
Смежные вопросы