-1

有人能告诉我为什么下面的查询在 Oracle 中被认为是无效的吗?

SELECT TO_CHAR(start_date,'dd/month')
FROM Table1
WHERE start_date IN (TO_DATE('JUN 15 12'), TO_DATE('AUG 19 12'));

是因为“dd/month”在组合时被认为是无效格式吗?

还是因为无法使用 IN 比较日期?

PS> 此时我无法访问 Oracle 数据库,这就是为什么我无法运行 sql 并得到确切的错误。我只知道声明无效,我想知道问题出在哪里。我是甲骨文的新手

4

2 回答 2

4

除非您更改了会话/数据库参数,否则 TO_DATE 格式应为 dd-mon-yy 格式。TO_DATE 的第二个参数是传入的日期格式。

SELECT TO_CHAR(start_date,'DD/MONTH')
FROM Table1
WHERE start_date IN (TO_DATE('JUN 15 2012', 'MON DD YYYY'), TO_DATE('AUG 19 2012', 'MON DD YYYY'));
于 2012-11-28T20:25:43.837 回答
0

TO_DATE尝试以如下方法提供格式:

 SELECT TO_CHAR(start_date,'DD/Month')
 FROM Table1
 WHERE start_date IN (
         to_date('JUN 15 2012', 'MON DD YYYY'), 
         to_date('AUG 19 2012', 'MON DD YYYY')
 );

此外,如果您想用于BETWEEN查找日期范围内的所有记录,则:

 SELECT TO_CHAR(start_date,'DD/Month')
 FROM Table1
 WHERE start_date BETWEEN to_date('JUN 15 2012', 'MON DD YYYY')
                      AND to_date('AUG 19 2012', 'MON DD YYYY');
于 2012-11-28T20:34:13.970 回答