簡體   English   中英

Oracle SQL中日期的正確格式

[英]Proper format for date in Oracle SQL

我正在嘗試運行此查詢,每次嘗試修復該查詢時,我都會遇到各種不同的錯誤,我相信這是正確的語法,但它一直告訴我我有無效的日期標識符。 Ive在網上看了一下,但在這里找不到我要做什么。

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;

在我的Oracle版本中,我使用“ '15 Jul 11'但這取決於設置。 可以肯定的是,您應該使用TO_DATE('20110715','YYYYMMDD')因為它明確說明了格式。

看來INV_DATE列的數據類型是DATE 如果是這樣,則應將DATE值提供給BETWEEN條件。

您可以檢查數據庫的NLS_DATE_FORMAT參數。 它指定TO_CHARTO_DATE函數的默認日期格式。 如果NLS_DATE_FORMATDD-MMM-YYDD-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文檔

此外,您幾乎不應該使用日期格式“ MON”,因為它也取決於語言和環境。

例如,如果您嘗試在中文環境中使用DD-MON-RR格式將“ 26-NOV-13”轉換為日期,則會失敗。 因為MON將與“ 11月”而不是“ NOV”匹配

您還可以將標准格式用於日期文字:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM