我总是搞不清ORACLE SQL查询中的日期格式,花了几分钟的时间一起去谷歌,有人能告诉我当我们在数据库表中有不同格式的日期时,最简单的处理方法吗?
例如,i有一个日期列ES_DATE,保存数据为27-APR-12 11.52.48.294030000 AM,数据类型为TIMESTAMP(6)WITH LOCAL TIME ZONE。
我写了一个简单的选择查询来获取那天的数据,但它什么也没有返回。有人能解释一下吗
select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')
或
select * from table where es_date = '27-APR-12';
4条答案
按热度按时间nue99wik1#
to_date()
返回00:00:00的日期,所以你需要从你要比较的日期中“删除”分钟数:您可能希望在
trunc(es_date)
上创建一个索引,如果这是您经常做的事情的话。如果将默认日期格式更改为其他格式,文字
'27-APR-12'
很容易失败。因此,请确保始终使用to_date()
和正确的格式掩码(或ANSI文字:date '2012-04-27'
)尽管您正确地使用了
to_date()
,并且没有依赖隐式数据类型转换,但是由于'dd-MON-yy'
,您对to_date()的使用仍然存在一个微妙的缺陷。使用不同的语言设置,这可能很容易失败,例如:
TO_DATE('27-MAY-12','dd-MON-yy')
(当NLS_LANG设置为德语时)。避免在不同语言中可能不同的格式中的任何内容。使用四位数的年份和数字,例如'dd-mm-yyyy'
或'yyyy-mm-dd'
7uhlpewt2#
如果您使用相同日期格式,并选择了在Oracle中查询日期位置:
Oracle提供的To_DATE
7vhp5slm3#
你可以使用这个命令来获取你的数据。这会提取你的数据
mrphzbgm4#
在我的例子中,当我将其用作
'01-NOV-2022'
时,发现一个非数字字符的字符错误。所以我就这样做了。