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 |
+-------------------------------------------------+