适当的Oracle SQL日期格式

时间:2013-11-26 02:31:49

标签: sql oracle oracle-sqldeveloper

我正在尝试运行此查询,每次我尝试修复它时都会遇到各种不同的错误,我相信这是正确的语法,但它一直告诉我我的日期标识符无效。我看过网上但是找不到我想要做的事情。

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;

4 个答案:

答案 0 :(得分:3)

在我的Oracle版本中,我使用'15 Jul 11'但这取决于设置。要确定您应该使用类似TO_DATE('20110715','YYYYMMDD')的内容,因为它明确说明格式。

答案 1 :(得分:1)

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 documentation

答案 2 :(得分:1)

此外,你应该很少使用日期格式'MON',因为它也取决于语言和环境。

例如,如果您尝试在中文环境中使用格式DD-MON-RR将'26 -NOV-13'转换为日期,则会失败。因为MON将与“11月”相匹配,而不是“NOV”

答案 3 :(得分: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;