小编典典

Oracle to_date SQL格式问题,

sql

我正在将时间戳字段格式化为“ DD / MM / YYYY”格式,以获取该日期的所有已处理记录。

select count(*) from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/2015','DD/MM/YYYY');

上面的查询返回0计数。

select count(*) from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/0015','DD/MM/YYYY');

上面的查询返回29个计数。

如果我运行:

select event_dt from task_log where to_date (event_dt,'DD/MM/YYYY')= to_date('19/05/0015','DD/MM/YYYY');
EVENT_DT
5/19/2015 9:35:23 AM
5/19/2015 9:35:23 AM
5/19/2015 9:37:22 AM
5/19/2015 9:37:23 AM
5/19/2015 9:37:32 AM
5/19/2015 9:37:53 AM

等等…

select to_date (event_dt,'DD/MM/YYYY') as to_date_Farmatted from task_log
TO_DATE_FARMATTED
5/19/0015
5/19/0015
5/19/0015
5/19/0015
5/19/0015

to_date格式将年份格式化为 0015

如何避免将年份格式化为0015格式?我需要2015年的格式。请帮助我解决此问题。


阅读 150

收藏
2021-04-28

共1个答案

小编典典

截止日期(event_dt,“ DD / MM / YYYY”)

根据您对评论的回复,

  1. 您的数据库是 Oracle
  2. event_date列的数据类型为 DATE

切勿在 DATE* 列上应用 TO_DATE 。它迫使Oracle: *

  • 首先将其转换为字符串
  • 然后将其转换回日期

基于 特定语言环境的NLS设置 。您需要 TO_DATE 将文字转换为日期。对于 date-arithmetic
,请保留原样的日期。

您需要做的只是:

select count(*)
   from task_log 
  where trunc(event_dt) = to_date('19/05/2015','DD/MM/YYYY');

现在,要抓住的是 TRUNC 函数。请记住,DATE具有两个datetime元素。因此,在比较两个日期时必须牢记时间部分。

应用 TRUNC 将抑制任何常规 索引的 使用。最好使用“ 日期范围” 条件。

例如,

select count(*)
   from task_log 
  where event_date 
 between to_date('19/05/2015','DD/MM/YYYY')
    and to_date('19/05/2015','DD/MM/YYYY') + 1;
2021-04-28