Oracle to_date SQL 格式问题,
Oracle to_date SQL formatting issue,
我正在将时间戳字段格式化为 '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 函数。请记住,DATE 具有两个日期时间元素。因此,在比较两个日期时,您必须牢记时间部分。
应用 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;
我正在将时间戳字段格式化为 '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 函数。请记住,DATE 具有两个日期时间元素。因此,在比较两个日期时,您必须牢记时间部分。
应用 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;