В запрашиваемой таблице есть даты, хранящиеся как varchar2. Мне нужно сравнить даты, хранящиеся как varchar2, с sysdate, используя BETWEEN sysdate-1 AND sysdate-30
(чтобы вернуть даты varchar2 за последний месяц).
При указании TO_DATE(varchar2, 'DD-MON-YYYY')
я получаю, что литерал ошибки не соответствует строке формата.
Я застрял, поскольку в документации Oracle говорится, что это приемлемый формат для TO_DATE()
при преобразовании из varchar2.
ОБНОВЛЕНИЕ: это корпоративная база данных, я не проектировал ее и могу работать только с тем, что у меня есть. Набор данных огромен и автоматически обновляется устройствами SCADA, более 10 000 устройств ежедневно.
SELECT device_name, read_date, sysdate
FROM oracle_database
------- Data Returned by query --------
device_name read_date sysdate
Device 1 5/14/2013 22-Sep-14
Device 2 5/14/2013 22-Sep-14
Device 3 5/14/2013 22-Sep-14
Device 4 5/14/2013 22-Sep-14
Device 5 5/14/2013 22-Sep-14
Device 6 5/14/2013 22-Sep-14
Device 7 5/14/2013 22-Sep-14
Результаты с использованием TO_DATE
ВЫБЕРИТЕ имя_устройства, TO_DATE (дата_ чтения, 'ДД-МЕС-ГГ'), системная дата
------- Данные, возвращаемые запросом ----------
ORA-01861: литерал не соответствует строке формата
nls_date_format
, если он не уверен в настройках nls, но я воздержался, поскольку я любитель, играющий больше в формате уровня запроса, чем на уровне сеанса, и это переопределит настройки уровня сеанса. Давайте посмотрим, что OP сообщает нам о дальнейших деталях. Я постараюсь импровизировать свой ответ на основе новых данных OP. - person Lalit Kumar B   schedule 22.09.2014