南大通用GBase 8a日期截断函数date_trunc使用样例

GBase 8a通过date_trunc函数,将日期指定精度位置以后的部分截断。本文介绍该函数各种参数的使用样例。

参考

GBase 8a日期函数date_part和extract的介绍和使用样例

语法

date_trunc(type,date)
  • type 截断的精度位置。低于该精度的截断。
  • date 日期,一般是datetime类型。如果是date类型会自动转成datetime

其中type类型,支持不带引号和带引号两种写法,比如 year和'year'都支持。

Type类型说明date_part/extractdate_trunc
year日期中的年的部分。请注意区分isoyear。年以下的设置为01-01 00:00:00
year_month年月返回年和月不支持
quarter季度返回属于第几个季度。
1:01-01 - 03-31
2:04-01 - 06-30
3:07-01 - 09-30
4:10-01 - 12-31
日期所在季度的第一天,时间部分为00:00:00
month日期中的月份日期所在月的第一天,时间部分为00:00:00
week日期所在当年的第几周日期所在周的周一,时间部分为00:00:00
day日期中的日日期的时间部分设置为00:00:00
day_hour日,小时日期中的日和小时不支持
day_minute日、小时、分日期中的日、小时和分不支持
day_second日、小时、分、秒日期中的日、小时、分和秒不支持
hour小时日期中的小时部分小时以下设置为00:00
hour_minute小时、分钟日期中的小时、分钟部分不支持
hour_second小时、分、秒日期中的小时、分种、表部分不支持
minute分钟日期中的分钟部分分钟以下的设置为0
minute_second分钟、秒日期中的分、秒部分不支持
second日期中的秒秒以下设置为0
millisecond毫秒日期中的毫秒部分不支持
microsecond微秒日期中的微秒部分不支持
day_microsecond天、小时、分、秒、微秒日期中的天、小时、分、秒、微秒部分。
注意格式为ddhhmmssXXXXXX
不支持
hour_microsecond小时、分、秒、微秒日期中的小时、分、秒、微秒部分。
注意格式为hhmmssXXXXXX
不支持
minute_microsecond分、秒、微秒日期中的分、秒、微秒部分。
注意格式为mmssXXXXXX
不支持
second_microsecond秒、微秒日期中的秒、微秒部分。
注意格式为ssXXXXXX
不支持
Century世纪该日期所在的世纪。以百年为单位,整百年为上一世纪。
0001-0100 第1世纪
0101-2000 第2世纪
...
2021-2100 第21世纪
该日期所在世纪的第一天
decade十年年份的10取整。比如2023年算202个10年。日期所在10年的第一天。时间为0
dow周的第几天0-6日期是所在周的第几天。周日为0,周一为1,周六为6
注意和isodow的区别
不支持
doy年的第几天日期是当前的第几天不支持
epoch带微秒的时间戳extract支持,与unix_timestamp类似,多了微秒部分(如果有的话)
1682046733.56789
不支持
isodow周的第几天1-7日期是所在周的第几天。周一为1,周六为6,周日为7
注意和dow的区别
不支持
isoyear日期落在iso8601周编号的年按照iso8601编号,每年第一个周四所在的周作为该年的第一周。买年最后一个周四所在的周作为该年的最后一周。所以年初,年末的日期,可能是上一年或者下一年的。
注意和year的区别。
不支持
millennium千年当前年份是第几个千年
0001-1000 为第1个千年
1001-2000 为第2个千年
2001-3000 为第3个千年 ...
所在千年第一日,时间为00:00:00
milliseconds秒,毫秒返回时间中的秒和毫秒部分毫秒以下设置为0
microseconds秒,微秒
等同于second_microsecond
返回秒,微秒部分。
注意格式为ssXXXXXX
微秒以下设置为0

year

年的第一天,年已下为 01-01 00:00:00

参数是否有双引号均可,后面的例子不再重复。

gbase> select date_trunc(year,'2023-04-21 11:12:13.56789');
+----------------------------------------------+
| date_trunc(year,'2023-04-21 11:12:13.56789') |
+----------------------------------------------+
| 2023-01-01 00:00:00                          |
+----------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select date_trunc('year','2023-04-21 11:12:13.56789');
+------------------------------------------------+
| date_trunc('year','2023-04-21 11:12:13.56789') |
+------------------------------------------------+
| 2023-01-01 00:00:00                            |
+------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

quarter

日期所在季度的第一天,时间部分为00:00:00

gbase> select date_trunc(quarter,'2023-04-21 11:12:13.56789');
+-------------------------------------------------+
| date_trunc(quarter,'2023-04-21 11:12:13.56789') |
+-------------------------------------------------+
| 2023-04-01 00:00:00                             |
+-------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

month

日期所在月的第一天,时间部分为00:00:00

gbase> select date_trunc(month,'2023-04-21 11:12:13.56789');
+-----------------------------------------------+
| date_trunc(month,'2023-04-21 11:12:13.56789') |
+-----------------------------------------------+
| 2023-04-01 00:00:00                           |
+-----------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

week

日期所在周的周一,时间部分为00:00:00。 每年的第一周所在周一可能在上一年度。

gbase> select date_trunc(week,'2023-04-21 11:12:13.56789');
+----------------------------------------------+
| date_trunc(week,'2023-04-21 11:12:13.56789') |
+----------------------------------------------+
| 2023-04-17 00:00:00                          |
+----------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select date_trunc(week,'2023-01-1 11:12:13.56789');
+---------------------------------------------+
| date_trunc(week,'2023-01-1 11:12:13.56789') |
+---------------------------------------------+
| 2022-12-26 00:00:00                         |
+---------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

day

日期的时间部分设置为00:00:00

gbase> select date_trunc(day,'2023-04-21 11:12:13.56789');
+---------------------------------------------+
| date_trunc(day,'2023-04-21 11:12:13.56789') |
+---------------------------------------------+
| 2023-04-21 00:00:00                         |
+---------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

hour

小时以下设置为00:00

gbase> select date_trunc(hour,'2023-04-21 11:12:13.56789');
+----------------------------------------------+
| date_trunc(hour,'2023-04-21 11:12:13.56789') |
+----------------------------------------------+
| 2023-04-21 11:00:00                          |
+----------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

minute

分钟以下设置为00

gbase> select date_trunc(minute,'2023-04-21 11:12:13.56789');
+------------------------------------------------+
| date_trunc(minute,'2023-04-21 11:12:13.56789') |
+------------------------------------------------+
| 2023-04-21 11:12:00                            |
+------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase>

second

秒以下的设置为0

gbase> select date_trunc(second,'2023-04-21 11:12:13.56789');
+------------------------------------------------+
| date_trunc(second,'2023-04-21 11:12:13.56789') |
+------------------------------------------------+
| 2023-04-21 11:12:13                            |
+------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

century

该日期所在世纪的第一天

gbase> select date_trunc(century,'2023-04-21 11:12:13.56789');
+-------------------------------------------------+
| date_trunc(century,'2023-04-21 11:12:13.56789') |
+-------------------------------------------------+
| 2001-01-01 00:00:00                             |
+-------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

decade

日期所在10年的第一天,时间为0

gbase> select date_trunc(decade,'2023-04-21 11:12:13.56789');
+------------------------------------------------+
| date_trunc(decade,'2023-04-21 11:12:13.56789') |
+------------------------------------------------+
| 2020-01-01 00:00:00                            |
+------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

millennium

日期所在千年的第一天

gbase> select date_trunc(millennium,'2023-04-23 11:12:13.56789');
+----------------------------------------------------+
| date_trunc(millennium,'2023-04-23 11:12:13.56789') |
+----------------------------------------------------+
| 2001-01-01 00:00:00                                |
+----------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

milliseconds

将日期的毫秒以下设置为0

gbase> select date_trunc(milliseconds,'2023-04-23 11:12:13.56789');
+------------------------------------------------------+
| date_trunc(milliseconds,'2023-04-23 11:12:13.56789') |
+------------------------------------------------------+
| 2023-04-23 11:12:13.567000                           |
+------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

microseconds

微秒,等同于second_mircrosecond

gbase> select date_trunc(microseconds,'2023-04-23 11:12:13.56789');
+------------------------------------------------------+
| date_trunc(microseconds,'2023-04-23 11:12:13.56789') |
+------------------------------------------------------+
| 2023-04-23 11:12:13.567890                           |
+------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)