首页 > 解决方案 > 使用 to_date() 选择时间段

问题描述

我正在尝试选择一个特定的时间段(天和小时),以使人们花在观看特定频道上的平均秒数。

我尝试了这个特定的功能:(to_date)

select  cust_id, ini_datetime,end_datetime, avg(qtd_seconds) as Avg_Sec, Channel

from crm.tmp_4

where   ini_datetime between ( to_date(2019-11-30 17:50:00.0, 'YYYY-MM-DD HH24:MI:SS.FF') and 
to_date(2019-11-30 18:00:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) 
    and end_datetime between ( to_date(2019-11-30 19:40:00.0,'YYYY-MM-DD HH24:MI:SS.FF') and to_date(2019-11-30 19:50:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) 

group by cust_id,ini_datetime,end_datetime, Channel

但它给了我这个错误:“ParseException line 3:50 cannot identify input near '17' ':' '50'”。有谁知道如何解决这个问题?

我也尝试了 to_timestamp 并没有工作。

谢谢!

标签: oraclebetweento-date

解决方案


该值必须用引号引起来,因此您的查询应该是这样的:

select  cust_id, ini_datetime,end_datetime, avg(qtd_seconds) as Avg_Sec, Channel    
from crm.tmp_4    
where ini_datetime between ( to_date('2019-11-30 17:50:00', 'YYYY-MM-DD HH24:MI:SS') 
        and to_date('2019-11-30 18:00:00','YYYY-MM-DD HH24:MI:SS') ) 
    and end_datetime between ( to_date('2019-11-30 19:40:00','YYYY-MM-DD HH24:MI:SS') 
        and to_date('2019-11-30 19:50:00','YYYY-MM-DD HH24:MI:SS') )     
group by cust_id,ini_datetime,end_datetime, Channel

数据类型DATE不支持小数秒。如果您需要它们,请使用TO_TIMESTAMP而不是TO_DATE.


推荐阅读