[英]Oracle SQL query for Date format
我总是对 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';
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'
很容易失败。 因此,请确保始终使用带有正确格式掩码(或 ANSI 文字: date '2012-04-27'
)的to_date()
)
尽管您在使用to_date()
并且不依赖隐式数据类型转换方面做得对,但由于格式'dd-MON-yy'
,您对 to_date() 的使用仍然有一个微妙的陷阱。
使用不同的语言设置TO_DATE('27-MAY-12','dd-MON-yy')
当 NLS_LANG 设置为德语时TO_DATE('27-MAY-12','dd-MON-yy')
这可能很容易失败,例如TO_DATE('27-MAY-12','dd-MON-yy')
。 避免任何在不同语言中可能不同的格式。 使用四位数年份和数字,例如'dd-mm-yyyy'
或'yyyy-mm-dd'
如果您使用相同的日期格式并在 oracle 中选择查询日期:
select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';
to_DATE 由 oracle 提供
您可以通过获取数据来使用此命令。 这将提取您的数据...
select * from employees where to_char(es_date,'dd/mon/yyyy')='17/jun/2003';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.