如何从两个日期中创建日期数组?
Posted
技术标签:
【中文标题】如何从两个日期中创建日期数组?【英文标题】:How to create dates array out of two dates? 【发布时间】:2020-09-07 14:22:43 【问题描述】:我有两列 start
和 finish
我如何创建一个包含这两个日期之间所有日期的数组?
例如,start=2020/09/01
finish=2020/09/03
,结果我想要[2020/09/01, 2020/09/02, 2020/09/03]
我想过timeSlots()
函数,但它似乎只适用于时间格式,也许Clickhouse中还有另一个类似dateSlots()
的函数?
【问题讨论】:
【参考方案1】: 其他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,
arrayMap(x -> toDate(x), 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-02','2020-09-03'] │
└────────────┴────────────┴──────────────────────────────────────────┴──────────────────────────────────────────┘
*/
【讨论】:
【参考方案2】:您可以根据天数差异生成数字,然后根据它生成新日期
SELECT groupArray(
toDate('2020-09-01') + INTERVAL number DAY
)
FROM numbers(
toUInt64(
dateDiff(
'day',
toDate('2020-09-01'),
toDate('2020-09-03')
) + 1
)
)
【讨论】:
以上是关于如何从两个日期中创建日期数组?的主要内容,如果未能解决你的问题,请参考以下文章