0
select * from mytable where datecolumn == to_date('01-DEC-13','DD-MMM-YY')

我收到“ORA-01821:日期格式无法识别”

在我从 mytable 查询 select * 的地方,我看到 datecolumn 中的值显示为“01-DEC-13”我做错了什么?

4

3 回答 3

3

我建议使用整个世纪作为日期。我处理过很多数据库,几个世纪以来有人因为不懂 Oracle 或前端语言而搞砸了。考虑一下这个01-DEC-13日期:

CREATE TABLE LousyDates (DateVal DATE);
INSERT INTO LousyDates VALUES (DATE '2013-12-01');
INSERT INTO LousyDates VALUES (DATE '1713-12-01');
INSERT INTO LousyDates VALUES (TO_DATE('12/1/13 BC', 'MM/DD/YYYY BC'));

SELECT
  TO_CHAR(DateVal, 'DD-MON-YY') AS NoCentury,
  TO_CHAR(DateVal, 'MM/DD/YYYY BC') AS WithCentury
FROM LousyDates;

NOCENTURY          WITHCENTURY
------------------ -------------
01-DEC-13          12/01/2013 AD
01-DEC-13          12/01/1713 AD
01-DEC-13          12/01/0013 BC

好吧,也许我用公元前 13 年的日期夸大了这一点,但你明白了 :)

使用世纪...

SELECT * FROM MyTable WHERE datecolumn = TO_DATE('01-DEC-2013', 'DD-MON-YYYY')

或者

SELECT * FROM MyTable WHERE datecolumn = DATE '2013-12-01'
于 2013-03-26T03:24:59.173 回答
1

除非你 100% 确定你永远不会使用不同的语言设置,否则我建议使用 MM 而不是 MON:

select * from mytable where datecolumn = to_date('2013-12-01', 'YYYY-MM-DD')

这适用于任何 NLS 设置,而将 to_date(...MON...) 的输出与 'DEC' 进行比较将在不同的语言环境中完全失败。

于 2013-03-26T09:58:59.727 回答
0

尝试这个:

 SELECT * from MYTABLE WHERE TO_CHAR(datecolumn,'DD-MON-YY') == '01-DEC-13'

而不是转换你的通配符,尝试转换你的日期时间。

于 2013-03-26T02:39:29.647 回答