如何解决如何从两个日期中创建日期数组?
我有两列start
和finish
,我如何创建一个包含这两个日期之间所有日期的数组?
例如start=2020/09/01
finish=2020/09/03
,因此我想拥有[2020/09/01,2020/09/02,2020/09/03]
我考虑过timeSlots()
函数,但是它似乎仅适用于时间格式,也许Clickhouse中还有另一个函数dateSlots()
?
解决方法
- 2种其他方式:
SELECT
toDate('2020-09-01') AS start,toDate('2020-09-03') AS end,arrayMap(x -> toDate(x),timeSlots(toDateTime(start),toUInt32((end - start)*24*60*60),24*60*60)) AS timeslot_result,range(toUInt32(start),toUInt32(end) + 1)) AS range_result
/*
┌──────start─┬────────end─┬─timeslot_result──────────────────────────┬─range_result─────────────────────────────┐
│ 2020-09-01 │ 2020-09-03 │ ['2020-09-01','2020-09-02','2020-09-03'] │ ['2020-09-01','2020-09-03'] │
└────────────┴────────────┴──────────────────────────────────────────┴──────────────────────────────────────────┘
*/
,
您可以从diff天生成数字,然后根据它生成新日期
SELECT groupArray(
toDate('2020-09-01') + INTERVAL number DAY
)
FROM numbers(
toUInt64(
dateDiff(
'day',toDate('2020-09-01'),toDate('2020-09-03')
) + 1
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。