Sql 如何从没有时区列的时间戳中提取时间?

Sql 如何从没有时区列的时间戳中提取时间?,sql,postgresql,datetime,time,pivot,Sql,Postgresql,Datetime,Time,Pivot,我想计算每天每个时间间隔的订单数量 日期的格式是没有时区的时间戳。我似乎不能只提取时间。我每天都使用这个查询,但是有没有办法将一个月中每天的时间间隔放在一个表中 CASE WHEN date_created_utc >= timestamp '2020-09-01 08:00:00' AND date_created_utc <= timestamp '2020-09-01 11:00:00' THEN 'Q1' WHEN date_created_utc >= tim

我想计算每天每个时间间隔的订单数量

日期的格式是没有时区的时间戳。我似乎不能只提取时间。我每天都使用这个查询,但是有没有办法将一个月中每天的时间间隔放在一个表中

CASE WHEN date_created_utc >= timestamp '2020-09-01 08:00:00' AND date_created_utc <= timestamp '2020-09-01 11:00:00' THEN 'Q1'    
WHEN date_created_utc >= timestamp '2020-09-01 11:00:01' AND date_created_utc <= timestamp '2020-09-01 14:00:00' THEN 'Q2'    
WHEN date_created_utc >= timestamp '2020-09-01 14:00:01' AND date_created_utc <= timestamp '2020-09-01 16:00:00' THEN 'Q3'    
WHEN date_created_utc >= timestamp '2020-09-01 16:00:01' AND date_created_utc <= timestamp '2020-09-01 20:00:00' THEN 'Q4'    
WHEN date_created_utc >= timestamp '2020-09-01 20:00:01' AND date_created_utc <= timestamp '2020-09-01 23:59:00' THEN 'Q5'    
END AS interval,    
COUNT(id) as cnt    
FROM order_processing    
GROUP BY 1;

您只需要小时部分来实现逻辑:您可以使用
extract()


您可以转换为时间,然后使用比较。对于聚合:

COUNT(*) FILTER (WHERE date_created_utc::time >= '08:00:00' and date_created_utc::time < '11:00:00') as cnt_1
   
COUNT(*)过滤器(其中date\u created\u utc::time>='08:00:00'和date\u created\u utc::time<'11:00:00')作为cnt\u 1

谢谢。这很有帮助,但我想用时间来代替,因为在最后一段时间里是23:59。你说的“我似乎不能只提取时间”是什么意思?你是怎么做到的?我用了……时间。我只是没有把我使用的其他查询放在这里。当我知道这是因为它必须在聚合函数中使用时,它不适用于case。计数(*)过滤器对我来说是新的。
select
    date_created_utc::date day,
    count(*) filter(where extract(hour from date_created_utc) between 8 and 10) q1,
    count(*) filter(where extract(hour from date_created_utc) between 11 and 14) q2,
    ...
from order_processing
group by date_created_utc::date
COUNT(*) FILTER (WHERE date_created_utc::time >= '08:00:00' and date_created_utc::time < '11:00:00') as cnt_1