2013-11-26 4 views
0

Я пытаюсь запустить этот запрос, и каждый раз, когда я пытаюсь его исправить, я получаю всевозможные разные ошибки, я считаю, что это правильный синтаксис, но он продолжает говорить мне, что у меня есть недопустимый Идентификатор даты. Ive посмотрел онлайн, но не может найти то, что я пытаюсь сделать здесь.Правильный формат даты в Oracle SQL

SELECT CUST_FNAME, CUST_LNAME, CUST_STREET, CUST_CITY, CUST_STATE, CUST_ZIP 
FROM LGCUSTOMER, LGPRODUCT, LGBRAND 
WHERE BRAND_NAME = 'FORESTERS BEST' 
AND INV_DATE BETWEEN '15-JUL-11' AND '31-JUL-11' 
ORDER BY CUST_STATE, CUST_LNAME, CUST_FNAME; 

ответ

1

Кажется, что тип данных столбца INV_DATE - DATE. Если это так, вы должны указать DATE значение BETWEEN.

Вы можете проверить NLS_DATE_FORMAT параметр вашей базы данных. Он определяет формат даты по умолчанию для TO_CHAR и TO_DATE. Если NLS_DATE_FORMAT равен DD-MMM-YY или DD-MMM-RR, ваш запрос должен работать нормально. В противном случае вы должны изменить строку даты в своем запросе, чтобы следовать за NLS_DATE_FORMAT. Или вы можете использовать функцию TO_DATE, как показано ниже.

... 
AND INV_DATE BETWEEN TO_DATE('15-JUL-11', 'DD-MMM-RR') AND TO_DATE('31-JUL-11', 'DD-MMM-RR') 
... 

Может быть, вы должны хотеть, чтобы прочитать то, что NLS_DATE_FORMAT, проверьте oracle documentation.

+0

все еще дает мне «INV_DATE» недопустимый идентификатор. –

+0

Ну, в какой таблице находится столбец 'INV_DATE'? Если он находится в таблице 'X', попробуйте использовать' X.INV_DATE' и посмотрите, что произойдет? – ntalbs

+0

Im приближается, теперь его просто работает и не останавливается. –

3

В моей версии Oracle я использую '15 Jul 11' Но это зависит от настроек. Чтобы быть уверенным, вы должны использовать что-то вроде TO_DATE('20110715','YYYYMMDD'), поскольку он явно указывает формат.

1

И кроме того, вы редко должны использовать формат даты «MON», так как это зависит от языка и среды.

Например, если вы попытаетесь преобразовать '26 -NOV-13 'на сегодняшний день, используя формат DD-MON-RR в среде китайского языка. потому что ПН будет сравниваться с «11 月», а не «ноябрь»

1

Вы также можете использовать стандартный формат дату литералов:

SELECT CUST_FNAME, CUST_LNAME, CUST_STREET, CUST_CITY, CUST_STATE, CUST_ZIP 
FROM LGCUSTOMER, LGPRODUCT, LGBRAND 
WHERE BRAND_NAME = 'FORESTERS BEST' 
AND INV_DATE BETWEEN DATE '2011-07-15' AND DATE '2011-07-31' 
ORDER BY CUST_STATE, CUST_LNAME, CUST_FNAME; 
Смежные вопросы