【问题标题】:Oracle SQL query for Date format日期格式的 Oracle SQL 查询
【发布时间】:2013-07-02 22:37:15
【问题描述】:

我总是对 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';

【问题讨论】:

    标签: sql database oracle oracle11g


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      Oracle 提供的 To_DATE

      【讨论】:

        【解决方案3】:

        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() 并且不依赖隐式数据类型转换方面做得很好,但由于'dd-MON-yy' 格式,您对to_date() 的使用仍然存在一个微妙的缺陷。

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

        【讨论】:

        • @user2246725:那么您并没有告诉我们一切。请在sqlfiddle.com 上创建一个简单的示例来显示您的问题。
        • 我没有得到确切日期的数据:- Where B.Timelog = to_date('14-Apr-17','DD-MM-YY')
        猜你喜欢
        • 2020-06-09
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多