DATE_TRUNC
将日期或时间戳截断到指定精度,提供一种标准化的方式来处理日期和时间戳。该函数旨在与多种数据库系统兼容,从而让用户更容易进行迁移并使用不同的数据库。
语法
DATE_TRUNC(<precision>, <date_or_timestamp>)
Week Start 配置
当使用 WEEK 作为精度参数时,结果取决于 week_start 设置,该设置定义了一周的第一天:
week_start = 1(默认):星期一被视为一周的第一天week_start = 0:星期日被视为一周的第一天
你可以使用 SETTINGS 子句为特定查询更改此设置:
-- Set Sunday as the first day of the week
SETTINGS (week_start = 0) SELECT DATE_TRUNC(WEEK, to_date('2024-04-05'));
-- Set Monday as the first day of the week (default)
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-01 │ 2022-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.000000 │ 2022-07-07 01:01:01.000000 │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
另请参阅
- TRUNC:提供类似功能,但使用不同的语法,以获得更好的 SQL 标准兼容性。
- TIME_SLICE:将单个日期/时间戳值映射到与日历对齐的时间区间。