Skip to main content

TRUNC

引入版本: v1.2.745

将日期或时间戳截断到指定精度。此函数遵循广泛采用的日期截断语法,便于从其他数据库系统迁移的用户使用。

语法

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

周起始配置

当使用 WEEK 作为日期时间间隔类型时,结果取决于 week_start 设置,该设置定义了一周的第一天:

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

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

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

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

返回类型

<date_or_timestamp> 相同。

示例

-- 截断到不同精度
SELECT
TRUNC(to_date('2022-07-07'), 'MONTH'),
TRUNC(to_date('2022-07-07'), 'WEEK'),
TRUNC(to_date('2022-07-07'), 'YEAR');

┌────────────────────────────────────────────────────────────────────────────────────┐
│ TRUNC(to_date('2022-07-07'), 'MONTH') │ TRUNC(to_date('2022-07-07'), 'WEEK') │ TRUNC(to_date('2022-07-07'), 'YEAR')
├──────────────────────────────────────┼─────────────────────────────────────┼─────────────────────────────────────┤
2022-07-012022-07-042022-01-01
└────────────────────────────────────────────────────────────────────────────────────┘

以下示例演示了 week_start 设置如何影响使用 WEEK 精度的 TRUNC 结果:

-- 默认: week_start = 1 (周一为一周第一天)
SELECT TRUNC(to_date('2024-04-03'), 'WEEK'); -- 周三

┌─────────────────────────────────────┐
│ TRUNC(to_date('2024-04-03'), 'WEEK')
├─────────────────────────────────────┤
2024-04-01-- 周一
└─────────────────────────────────────┘

-- 设置 week_start = 0 (周日为一周第一天)
SETTINGS (week_start = 0) SELECT TRUNC(to_date('2024-04-03'), 'WEEK'); -- 周三

┌─────────────────────────────────────┐
│ TRUNC(to_date('2024-04-03'), 'WEEK')
├─────────────────────────────────────┤
2024-03-31-- 周日
└─────────────────────────────────────┘

对时间戳值使用 TRUNC:

SELECT TRUNC(to_timestamp('2022-07-07 15:30:45.123456'), 'DAY');

┌───────────────────────────────────────────────────────┐
│ TRUNC(to_timestamp('2022-07-07 15:30:45.123456'), 'DAY')
├───────────────────────────────────────────────────────┤
2022-07-07 00:00:00.000000
└───────────────────────────────────────────────────────┘
Explore Databend Cloud for FREE
Low-cost
Fast Analytics
Easy Data Ingestion
Elastic Scaling
Try it today