如何正确查询oracle日期?

时间:2013-03-26 02:32:48

标签: sql oracle

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

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

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

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

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

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

这适用于任何NLS设置,而将to_date(... MON ...)的输出与'DEC'将在不同的地区完全失败。

答案 2 :(得分:0)

试试这个:

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

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