有人可以告诉我为什么以下查询在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无法比较日期?
P.S>我此时无法访问Oracle数据库,这就是为什么我无法运行sql并获得确切错误的原因。我所知道的是声明无效,我想知道问题是什么。我是Oracle的新手
答案 0 :(得分: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'));
答案 1 :(得分: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');