Oracle to_date SQL格式问题,

3 sql oracle date-arithmetic

我将时间戳字段格式化为'DD/MM/YYYY'格式以获取该日期的所有处理记录.

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

上面的查询返回0计数.

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

上面的查询返回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
Run Code Online (Sandbox Code Playgroud)

等等...

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
Run Code Online (Sandbox Code Playgroud)

to_date格式是格式化为0015年

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

Lal*_*r B 8

to_date(event_dt,'DD/MM/YYYY')

根据您对评论的回复,

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

永远不要在DATE列上申请TO_DATE.它迫使Oracle:

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

基于特定语言环境的NLS设置.您需要TO_DATE将文字转换为日期.对于日期算术,请保留日期.

你需要做的就是:

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

现在,catch是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;
Run Code Online (Sandbox Code Playgroud)