gpt4 book ai didi

sql - 日期格式的 Oracle SQL 查询

转载 作者:太空狗 更新时间:2023-10-30 01:40:16 25 4
gpt4 key购买 nike

我总是对 ORACLE SQL 查询中的日期格式感到困惑,并花几分钟时间一起谷歌,当我们在数据库表中有不同格式的日期时,有人能解释一下最简单的解决方法吗?

例如,我有一个日期列为 ES_DATE,数据保存为 27-APR-12 11.52.48.294030000 AM,数据类型为 TIMESTAMP(6) WITH LOCAL TIME ZONE。

enter image description here

我编写了简单的选择查询来获取特定日期的数据,但它没有返回任何结果。谁能给我解释一下?

select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')

select * from table where es_date = '27-APR-12';

最佳答案

to_date() 返回 00:00:00 的日期,因此您需要从要比较的日期中“删除”分钟数:

select * 
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')

如果您经常这样做,您可能希望在 trunc(es_date) 上创建索引。

如果将默认日期格式更改为任何不同的内容,则文字 '27-APR-12' 很容易失败。因此,请确保您始终使用具有正确格式掩码(或 ANSI 文字:date '2012-04-27')的 to_date()

尽管您正确地使用了 to_date() 并且没有依赖隐式数据类型转换,但是由于 'dd-MON 格式,您对 to_date() 的使用仍然有一个微妙的缺陷-yy'

使用不同的语言设置,这可能很容易失败,例如TO_DATE('27-MAY-12','dd-MON-yy') 当 NLS_LANG 设置为德语时。避免使用不同语言可能不同的格式。使用四位数年份且仅使用数字,例如'dd-mm-yyyy''yyyy-mm-dd'

关于sql - 日期格式的 Oracle SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com