跳到主要内容

DATE_TRUNC

引入或更新于:v1.2.745

将日期或时间戳截断到指定精度,为日期和时间戳操作提供标准化方式。该函数旨在兼容多种数据库系统,便于用户迁移并在不同数据库间工作。

语法

DATE_TRUNC(<precision>, <date_or_timestamp>)
参数描述
<precision>必须是以下值之一:YEARQUARTERMONTHWEEKDAYHOURMINUTESECOND
<date_or_timestamp>DATETIMESTAMP 类型的值。

周起始日配置

当使用 WEEK 作为精度参数时,结果取决于 week_start 设置,该设置定义一周的第一天:

  • week_start = 1(默认):星期一被视为一周的第一天
  • week_start = 0:星期日被视为一周的第一天

可使用 SETTINGS 子句为特定查询更改此设置:

-- 将星期日设为一周的第一天
SETTINGS (week_start = 0) SELECT DATE_TRUNC(WEEK, to_date('2024-04-05'));

-- 将星期一设为一周的第一天(默认)
SETTINGS (week_start = 1) SELECT DATE_TRUNC(WEEK, to_date('2024-04-05'));

返回类型

<date_or_timestamp> 相同。

示例

SELECT
DATE_TRUNC(MONTH, to_date('2022-07-07')),
DATE_TRUNC(WEEK, to_date('2022-07-07'));

┌────────────────────────────────────────────────────────────────────────────────────┐
│ DATE_TRUNC(MONTH, to_date('2022-07-07')) │ DATE_TRUNC(WEEK, to_date('2022-07-07'))
├──────────────────────────────────────────┼─────────────────────────────────────────┤
2022-07-012022-07-04
└────────────────────────────────────────────────────────────────────────────────────┘
SELECT
DATE_TRUNC(HOUR, to_timestamp('2022-07-07 01:01:01.123456')),
DATE_TRUNC(SECOND, to_timestamp('2022-07-07 01:01:01.123456'));

┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DATE_TRUNC(HOUR, to_timestamp('2022-07-07 01:01:01.123456')) │ DATE_TRUNC(SECOND, to_timestamp('2022-07-07 01:01:01.123456'))
├─────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤
2022-07-07 01:00:00.0000002022-07-07 01:01:01.000000
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

另请参阅

  • TRUNC:提供类似功能,语法不同,以更好地兼容 SQL 标准。
  • TIME_SLICE:将单个日期/时间戳值映射到与日历对齐的区间。
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册