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
只能是year
、quarter
、month
、week
或day
。 如果您将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
设置为 hour
、minute
或 second
,则返回值的时部分默认为 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 |
+-------------------------------------------------+