Clickhouse获取本周的最后一天、本月的最后一天

Clickhouse获取本周的最后一天、本月的最后一天

文章目录

  • Clickhouse获取本周的最后一天、本月的最后一天
    • 获取本周的最后一天
    • 本月的最后一天

Clickhouse官网日期函数:

https://clickhouse.com/docs/zh/sql-reference/functions/date-time-functions/#to-unix-timestamp

获取本周的最后一天

在官网给出的日期函数中,给出了计算指定日期所在周的第一天(周一):

toMonday()

将Date或DateTime向前取整到本周的星期一。 返回Date类型。

比如当前日期:

select toMonday(toDate('2022-12-08'));


┌─toMonday(toDate('2022-12-08'))─┐
│                     2022-12-05 │
└────────────────────────────────┘

返回指定日期所在周的周一的日期

获取到指定日期所在周的最后一天的日期(周日)

date_add(DAY, 7-toDayOfWeek(toDate('2022-12-08')), toDate('2022-12-08'))


┌─plus(toDate('2022-12-08'), toIntervalDay(minus(7, toDayOfWeek(toDate('2022-12-08')))))─┐
│                                                                             2022-12-11 │
└────────────────────────────────────────────────────────────────────────────────────────┘

核心思想就是利用toDayOfWeek方法计算出指定所在周的第几天,然后算出到周日的差值,再用date_add方法加上这个差值,就是当前当前日期所在周的周日的日期。

本月的最后一天

在官网给出的日期函数中,给出了计算指定日期所在月的第一天:

toStartOfMonth()

将Date或DateTime向前取整到本月的第一天。 返回Date类型。

比如当前日期:

select toStartOfMonth(toDate('2022-12-08'));


┌─toStartOfMonth(toDate('2022-12-08'))─┐
│                           2022-12-01 │
└──────────────────────────────────────┘

那么如何获取到本月的最后一天呢?

select date_sub(DAY, 1, toStartOfMonth(date_add(MONTH, 1, toDate('2022-12-08'))))

┌─minus(toStartOfMonth(plus(toDate('2022-12-08'), toIntervalMonth(1))), toIntervalDay(1))─┐
│                                                                              2022-12-31 │
└─────────────────────────────────────────────────────────────────────────────────────────┘

核心思想就是,先利用date_add方法计算出当前日期的下一个月所在的日期,然后利用toStartOfMonth方法算出下个月的月初,再利用date_sub方法将下个月月初的日期-1,就得到本月的最后一天所在的日期了。

注意,这里,如果下一个月的日期不存在,比如date_add(MONTH, 1, toDate('2022-10-31'));,11月不存在31号,只会得到2022-11-30:

select date_add(MONTH, 1, toDate('2022-10-31'));

┌─plus(toDate('2022-10-31'), toIntervalMonth(1))─┐
│                                     2022-11-30 │
└────────────────────────────────────────────────┘

你可能感兴趣的:(Clickhouse,大数据开发,clickhouse,sql)