30

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

例如,我有一个日期列作为 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

3 回答 3

64

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''yyyy-mm-dd'

于 2013-07-04T21:53:01.847 回答
9

如果您使用相同的日期格式并在 oracle 中选择查询日期:

   select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';

甲骨文提供的 To_DATE

于 2015-10-07T12:48:22.837 回答
3

您可以通过获取数据来使用此命令。这将提取您的数据...

select * from employees where to_char(es_date,'dd/mon/yyyy')='17/jun/2003';

于 2020-01-21T05:16:19.790 回答