Oracle TO_DATE 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年的格式上达成一年。请帮助我解决此问题。

to_date(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 函数。请记住,日期都有两个日期元素。因此,您必须在比较两个日期时牢记时间部分。

应用 trunc 会抑制任何常规 index 用法。最好使用日期范围条件。

例如,

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;

最新更新