日期格式的 Oracle SQL 查询

Posted

技术标签:

【中文标题】日期格式的 Oracle SQL 查询【英文标题】:Oracle SQL query for Date format 【发布时间】: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';

【问题讨论】:

【参考方案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')

以上是关于日期格式的 Oracle SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle查询日期格式的sql

oracle SQL语句,日期格式转换

Oracle复习SQL高级查询

oracle数据库如何改变日期格式

怎样修改oracle默认的日期格式

oracle 数据库日期格式怎么只要年月日