跳到主要内容
版本: 最新版本-3.5

date_trunc

基于指定日期部分(例如年、日、小时或分钟)截断时间值。

StarRocks 还为您提供了 year、quarter、month、week、day 和 hour 函数来提取指定的日期部分。

语法

DATETIME|DATE date_trunc(VARCHAR fmt, DATETIME|DATE datetime)

参数

  • datetime:要截断的时间,可以是 DATETIME 或 DATE 类型。日期和时间必须存在。 否则,将返回 NULL。 例如,2021-02-29 11:12:13 作为日期不存在,将返回 NULL。

  • fmt:日期部分,即 datetime 将被截断到的精度。 该值必须是 VARCHAR 常量。

    fmt 必须设置为下表中列出的值。 如果值不正确,将返回错误。

    如果 datetime 是 DATE 值,则 fmt 只能是 yearquartermonthweekday。 如果您将 fmt 设置为其他日期单位(例如 hour),则会报告错误。 请参见示例 8。

Value描述
microsecond截断到微秒 (自 3.1.7 起)。
millisecond截断到毫秒 (自 3.1.7 起)。
second截断到秒。
minute截断到分钟。 秒部分将归零。
hour截断到小时。 分钟和秒部分将归零。
day截断到天。 时间部分将归零。
week截断到 datetime 所在周的第一天。 时间部分将归零。
month截断到 datetime 所在月份的第一天。 时间部分将归零。
quarter截断到 datetime 所在季度的第一天。 时间部分将归零。
year截断到 datetime 所在年份的第一天。 时间部分将归零。

返回值

返回 DATETIME 或 DATE 类型的值。

如果 datetime 是 DATE 类型,并且 fmt 设置为 hourminutesecond,则返回值的时部分默认为 00:00:00

示例

示例 1:将输入时间截断到微秒。

select date_trunc('microsecond', '2023-10-31 23:59:59.001002');
+---------------------------------------------------------+
| date_trunc('microsecond', '2023-10-31 23:59:59.001002') |
+---------------------------------------------------------+
| 2023-10-31 23:59:59.001002 |
+---------------------------------------------------------+

示例 2:将输入时间截断到毫秒。

select date_trunc('millisecond', '2023-10-31 23:59:59.001002');
+---------------------------------------------------------+
| date_trunc('millisecond', '2023-10-31 23:59:59.001002') |
+---------------------------------------------------------+
| 2023-10-31 23:59:59.001000 |
+---------------------------------------------------------+

select date_trunc('millisecond', '2023-10-31');
+-----------------------------------------+
| date_trunc('millisecond', '2023-10-31') |
+-----------------------------------------+
| 2023-10-31 00:00:00 |
+-----------------------------------------+

示例 3:将输入时间截断到分钟。

select date_trunc('minute', '2023-11-04 23:59:59.001002');
+----------------------------------------------------+
| date_trunc('minute', '2023-11-04 23:59:59.001002') |
+----------------------------------------------------+
| 2023-11-04 23:59:00 |
+----------------------------------------------------+

示例 4:将输入时间截断到小时。

select date_trunc("hour", "2020-11-04 11:12:13");
+-------------------------------------------+
| date_trunc('hour', '2020-11-04 11:12:13') |
+-------------------------------------------+
| 2020-11-04 11:00:00 |
+-------------------------------------------+

示例 5:将输入时间截断到一周的第一天。

select date_trunc("week", "2020-11-04 11:12:13");
+-------------------------------------------+
| date_trunc('week', '2020-11-04 11:12:13') |
+-------------------------------------------+
| 2020-11-02 00:00:00 |
+-------------------------------------------+

示例 6:将输入时间截断到一个季度的第一天。

select date_trunc("quarter", "2020-11-04 11:12:13");
+----------------------------------------------+
| date_trunc('quarter', '2020-11-04 11:12:13') |
+----------------------------------------------+
| 2020-10-01 00:00:00 |
+----------------------------------------------+

示例 7:将输入时间截断到一年的第一天。

select date_trunc('year', '2023-11-04 23:59:59.001002');
+--------------------------------------------------+
| date_trunc('year', '2023-11-04 23:59:59.001002') |
+--------------------------------------------------+
| 2023-01-01 00:00:00 |
+--------------------------------------------------+

示例 8:将 DATE 值截断到小时。 返回错误。

select date_trunc("hour", cast("2020-11-04" as date));

ERROR 1064 (HY000): Getting analyzing error from line 1, column 26 to line 1, column 51. Detail message: date_trunc function can't support argument other than year|quarter|month|week|day.

示例 9:将输入日期截断到一年的第一天。

select date_trunc("month", cast("2020-11-04" as date));
+-------------------------------------------------+
| date_trunc('month', CAST('2020-11-04' AS DATE)) |
+-------------------------------------------------+
| 2020-11-01 |
+-------------------------------------------------+