psql generate_series方法不支持内部concat

时间:2018-06-29 15:06:17

标签: sql postgresql concat generate-series

以下sql代码按预期工作

generate_series('2018-06-29 00:00:00','2018-06-29 23:00:00', interval '1 hour')

但是当我使用concat方法而不是前2个参数时,会出现错误消息

generate_series(concat('2018-06-29 00:00:00', '+05'), concat('2018-06-29 23:00:00', '+05'), interval '1 hour')

错误消息

function generate_series(text, text, interval) does not exist

3 个答案:

答案 0 :(得分:1)

这是因为generate_series()对字符串不起作用。转换为正确的数据类型:

select generate_series(concat('2018-06-29 00:00:00'::text, '+05'::text)::timestamp,
                       concat('2018-06-29 23:00:00'::text, '+05'::text)::timestamp,
                       interval '1 hour'
                      )

答案 1 :(得分:1)

如果合并,它将变为文本数据类型。因此,您无法生成序列。

下面的查询将产生所需的结果

无需编写“间隔”。因为开始和结束是时间戳,所以PostgreSQL知道5h和1h是5小时和1小时

 select 
 generate_series(timestamp '2018-06-29 00:00:00' + '5h',
                 timestamp '2018-06-29 23:00:00' + '5h', 
                '1h')

答案 2 :(得分:0)

不需要concat()或字符串操作。

如果您想在开始和结束时间戳记上增加5个小时,则只需添加:

generate_series(timestamp '2018-06-29 00:00:00' + interval '5 hour',
                timestamp '2018-06-29 23:00:00' + interval '5 hour', interval '1 hour')