日期格式的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章