如何在Teradata中用SQL生成指定日期范围的小时级时间戳序列?
在Teradata中生成指定日期范围的小时级时间戳列表
当然可以,下面是两种实用的实现方式,能生成你需要的小时级时间戳列表:
方法一:使用递归CTE
这种方式逻辑直观,适合小范围日期生成:
WITH recursive hour_timestamps AS ( -- 起始时间 SELECT TIMESTAMP '2023-01-01 00:00:00' AS hour_ts UNION ALL -- 每次递增1小时,直到结束时间 SELECT hour_ts + INTERVAL '1' HOUR FROM hour_timestamps WHERE hour_ts < TIMESTAMP '2023-01-20 23:00:00' ) SELECT hour_ts FROM hour_timestamps ORDER BY hour_ts;
只需要修改起始和结束的TIMESTAMP值,就能生成对应范围的所有小时级时间戳。
方法二:利用系统日历表+小时序列(更高效)
Teradata自带的sys_calendar.calendar表包含完整日期数据,结合生成0-23的小时数,通过交叉连接生成结果,适合大范围日期:
SELECT CAST(c.calendar_date AS TIMESTAMP) + INTERVAL h.hour_num HOUR AS hour_ts FROM sys_calendar.calendar c CROSS JOIN ( -- 生成0到23的小时数 SELECT hour_num FROM ( SELECT ROW_NUMBER() OVER(ORDER BY 1) - 1 AS hour_num FROM sys_calendar.calendar QUALIFY hour_num <= 23 ) t ) h WHERE c.calendar_date BETWEEN DATE '2023-01-01' AND DATE '2023-01-20' ORDER BY hour_ts;
这个方法性能更优,尤其是日期范围较大时,能避免递归带来的性能损耗。
示例结果
生成的结果格式如下:
2023-01-01 00:00:00
2023-01-01 01:00:00
...
2023-01-01 23:00:00
2023-01-02 00:00:00
...
2023-01-20 23:00:00
内容的提问来源于stack exchange,提问作者user17178722
相关产品推荐
相关产品推荐

