Таблица, на которую я запрашиваю, имеет даты, хранящиеся как varchar2. Мне нужно сравнить даты, хранящиеся как varchar2 с sysdate, с помощью BETWEEN sysdate-1 AND sysdate-30
(чтобы вернуть даты varchar2 с последнего месяца).Varchar2 to date для сравнения sysdate
При указании TO_DATE(varchar2, 'DD-MON-YYYY')
Я получаю сообщение об ошибке «literal не соответствует строке формата».
Я застрял, поскольку документация 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
ВЫБРАТЬ device_name, TO_DATE (read_date, 'DD-MON-YY'), SYSDATE
------- Данные Возвращается запроса - ---------
ORA-01861: буквальный не соответствует строке формата
Можете привести пример ввода? – paqogomez
Вы должны использовать формат, соответствующий строкам, которые вы фактически сохранили. Вы должны надеяться, что все они в одном формате и действительны ... Возможно, у вас есть функция, которая пробует несколько форматов, но это беспорядок, особенно. если у вас есть сочетание дат DD/MM и MM/DD. Вот почему даты не должны храниться как строки ... В любом случае, если вы показываете некоторые данные образца и даты, которые они представляют (если это не очевидно), то может быть предложена подходящая модель. –
@Alex, надеюсь, вы не возражаете, если я попытаюсь ответить на основе «Почему не хранить дату как строку». Я включил ссылку на статью Эд Стивенса об этом, что довольно удивительно. И везде я использую одну и ту же ссылку для ответа на подобные вопросы. –