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 │
└────────────────────────────────────────────────┘
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JermeryBesian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值