我正在尝试运行此查询,每次我尝试修复它时都会遇到各种不同的错误,我相信这是正确的语法,但它一直告诉我我的日期标识符无效。我看过网上但是找不到我想要做的事情。
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;
答案 0 :(得分:3)
在我的Oracle版本中,我使用'15 Jul 11'
但这取决于设置。要确定您应该使用类似TO_DATE('20110715','YYYYMMDD')
的内容,因为它明确说明格式。
答案 1 :(得分: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。
答案 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;