跳到主要内容

date_trunc:日期截断

速查结论

date_trunc(fmt, ts) 是 Spark SQL 中用于将时间戳 ts 截断到 fmt 指定的单位的函数。

语法

date_trunc(fmt, ts)

参数说明

参数说明
fmt表示要截断到的单位的格式:"YEAR"、"YYYY"、"YY" - 截断到 ts 所在的年份的第一天,时间部分将被清零;"QUARTER" - 截断到 ts 所在的季度的第一天,时间部分将被清零;"MONTH"、"MM"、"MON" - 截断到 ts 所在的月份的第一天,时间部分将被清零;"WEEK" - 截断到 ts 所在的一周的星期一,时间部分将被清零;"DAY"、"DD" - 清零时间部分;"HOUR" - 清零分钟、秒和毫秒部分;"MINUTE" - 清零秒和毫秒部分;"SECOND" - 清零毫秒部分;"MILLISECOND" - 清零微秒部分;"MICROSECOND" - 保持不变。
ts日期时间值或有效的时间戳字符串。

Examples

> SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');
2015-01-01 00:00:00
> SELECT date_trunc('MM', '2015-03-05T09:32:05.359');
2015-03-01 00:00:00
> SELECT date_trunc('DD', '2015-03-05T09:32:05.359');
2015-03-05 00:00:00
> SELECT date_trunc('HOUR', '2015-03-05T09:32:05.359');
2015-03-05 09:00:00
> SELECT date_trunc('MILLISECOND', '2015-03-05T09:32:05.123456');
2015-03-05 09:32:05.123

常见报错与避坑指南

  • fmt 参数大小写:fmt 参数对大小写不敏感,'YEAR''year''Year' 等效。但为保持代码风格一致,建议全大写。
  • WEEK 截断的起始日'WEEK' 截断至所在周的星期一,而非星期日。这与 dayofweek 函数(1=星期日)的周起始日不同,注意区分。

Since: 2.3.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看