Oracle SQL - DATE больше, чем оператор
Как говорится в названии, я хочу найти способ проверить, какие из моих наборов данных пройдут через 6 месяцев после SYSDATE через запрос.
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
Я пробовал следующее, но он возвращает ошибку, говоря, что мой формат даты неверен. Однако, вставив данные, я использовал формат даты в соответствии с запрошенными/предназначенными и не имел проблем.
Ошибка в командной строке: 10 столбцов: 25
Blockquote
Отчет об ошибке -
Ошибка SQL: ORA-01861: литерал не соответствует строке формата 01861. 00000 - "literal не соответствует строке формата"
* Причина. Литералы на входе должны быть той же длины, что и литералы в строка формата (за исключением ведущих пробелов). Если Модификатор "FX" включен, буквально должна соответствовать точно, без лишних пробелов.
* Действие: исправьте строку формата в соответствии с литералом.
Ответы
Ответ 1
Поскольку ваша строка запроса является литералом, и если ваши даты будут правильно сохранены как DATE
, вы должны использовать литералы даты:
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
Если вы хотите использовать TO_DATE
(потому что, например, ваше значение запроса не является литералом), я предлагаю вам явно установить NLS_DATE_LANGUAGE, поскольку вы используете имена сокращенных месяцев США. Таким образом, он не будет ломаться на некоторых локализованных установках Oracle:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
Ответ 2
you need to convert the string to date using to_date() function
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
ИЛИ
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
ИЛИ
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
Это будет работать, только если OrderDate
хранится в Date format
. Если это Varchar
, вы должны применить to_date()
func в этом столбце, также как
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');
Ответ 3
вам нужно использовать функцию To_Date() для преобразования строки на дату!
http://www.techonthenet.com/oracle/functions/to_date.php