我正在将时间邮票字段格式化为'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')
根据您对评论的答复
- 您的数据库是 Oracle
- 您的
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;