通过手动传递日期将日期明智地拉出

时间:2018-11-12 11:19:50

标签: sql oracle oracle11g oracle10g

如何通过手动传递日期从表中提取明智的数据计数

我的代码:

select count(*),id,time_stamp 
from tab 
where trunc(time_stamp)='12-11-2018'
group by id,time_stamp.

出现类似not a valid month

的错误

2 个答案:

答案 0 :(得分:1)

您必须使用to_date函数将varchar转换为日期

 select count(*),id,time_stamp 
 from tab 
 where trunc(time_stamp)=to_date('12-11-2018','dd-mm-yyyy') 
 group by id,time_stamp.
  

TO_DATE将CHAR,VARCHAR2,NCHAR或NVARCHAR2数据类型的char转换为DATE数据类型的值。

答案 1 :(得分:1)

与日期比较时,您不能简单地使用任何格式的日期字符串,它必须匹配NLS_DATE_FORMAT或必须使用TO_DATE进行转换。

此外,最好不要直接在TRUNC中的日期列上使用where clause进行比较。如果索引存在于列time_stamp上,它将变慢并且可能无法利用索引(除非您在TRUNC(time_stamp)上具有基于函数的索引。将简单的DATE/TIMESTAMP文字与>=一起使用&<条件。

 select count(*),id,time_stamp 
 from tab 
 where time_stamp >= DATE '2018-11-12' AND time_stamp < DATE '2018-11-12' + 1
 group by id,time_stamp