我总是对 ORACLE SQL 查询中的日期格式感到困惑,并花几分钟时间去谷歌,有人可以向我解释当数据库表中有不同格式的日期时解决问题的最简单方法吗?
例如,我有一个日期列为 ES_DATE,保存的数据为 27-APR-12 11.52.48.294030000 AM,数据类型为 TIMESTAMP(6),带有本地时区。
我编写了简单的选择查询来获取特定日期的数据,但它什么也没返回。有人能给我解释一下吗?
select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')
or
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'
如果默认日期格式更改为任何不同的格式,则很容易失败。所以请确保你总是使用to_date()
使用正确的格式掩码(或 ANSI 文字:date '2012-04-27'
)
尽管你使用得正确to_date()
并且不依赖隐式数据类型转换,由于格式的原因,您对 to_date() 的使用仍然存在一个微妙的陷阱'dd-MON-yy'
.
使用不同的语言设置,这可能很容易失败,例如TO_DATE('27-MAY-12','dd-MON-yy')
当 NLS_LANG 设置为德语时。避免任何在不同语言中可能不同的格式。使用四位数年份且仅使用数字,例如'dd-mm-yyyy'
or 'yyyy-mm-dd'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)