DATE_PART
📄字数 1.7K
👁️阅读量 加载中...
功能描述
从日期或时间值中提取特定的部分(如年、月、日、小时、分钟、秒等)。
语法格式
sql
DATE_PART(FIELD, SOURCE)
输入参数
FIELD
:提取的部分,VARCHAR
类型。并非每种输入的数据类型都适用于所有字段。例如,无法从DATE
类型中提取小于一天的字段,也无法从TIME
类型中提取一天或更长时间的字段。SOURCE
:被提取的日期或时间值,DATE/DATETIME/DATETIME WITH TIME ZONE/TIME/TIME WITH TIME ZONE/INTERVAL
类型,或能隐式转换为上述类型的其他类型。
FIELD参数取值
FIELD | 取值说明 |
---|---|
millennium | 千年。19xx 的年份在第二个千年里,第三个千年从 2001年1月1日 开始。对于INTERVAL类型值,表示年份除以 1000 。 |
century | 世纪。对于 INTERVAL 类型值,表示年份除以 100 。 |
decade | 十年。即年份除以 10 。 |
year | 年份。 |
quarter | 季度。范围为 [1,4] 。 |
month | TIMESTAMP 类型值,表示一年里的月份数,范围为 [1,12] 。INTERVAL 类型值,表示月数,然后对 12 取模(除以 12 取余数),范围为 [0,11] 。 |
week | 该天所在的 ISO 8601 周编号的年份里是第几周。 |
day | TIMESTAMP 类型值,表示日期中的天,范围为 [1,31] 。INTERVAL 类型值,表示天数。 |
hour | 小时。范围为 [0,23] ,时间间隔不受限制。 |
minute | 分钟。范围为 [0,59] 。 |
second | 秒。范围为 [0,59] 。 |
milliseconds | 毫秒。时间值的秒部分(包括小数部分)乘以 1000 。 |
microseconds | 微秒。时间值的秒部分(包括小数部分)乘以 1000000 。 |
isoyear | 日期所落在的 ISO 8601 周编号的年,不适用于时间间隔。根据 ISO 8601 标准,一年的第一周是包含该年第一个星期四的那一周。某些年份的第一周可能从上一年的最后一两天开始。某些年份的最后一周可能延续到下一年的前几天。例如 2024-12-30 的结果是 2025 ,2022-1-1 的结果是 2021 。 |
dow | 星期几。0 表示星期日,1 表示星期一,依此类推到 6 表示星期六。 |
isodow | 星期几。1 表示星期一,2 表示星期二,依此类推到 7 表示星期日。 |
julian | 与日期或时间戳对应的儒略日(JDN,Julian Day Number)。 |
doy | 一年中的第几天。范围为 [1,366] 。 |
epoch | TIMESTAMP WITH TIME ZONE 类型值,表示自 1970-01-01 00:00:00 UTC 以来的秒数(之前的时间戳为负值)。DATE 类型值和 TIMESTAMP 类型值,是自 1970-01-01 00:00:00 以来的标称秒数(nominal number of seconds)。INTERVAL 类型值,它是时间间隔的总秒数。 |
timezone | 与UTC的时区偏移,以秒为单位。正值对应于 UTC 东边的时区,负值对应 UTC 西边的时区。 |
timezone_hour | 时区偏移的小时部分。 |
timezone_minute | 时区偏移的分钟部分。 |
提示
- 因
NULL
无具体的类型,当第二个参数为NULL
时,会产生异常E10100 候选函数出现多义性
,需要手动为参数指定具体的形参类型,如:DATE_PART(NULL, NULL::DATE)
。
输出结果
返回 DOUBLE
类型,任意输入参数为 NULL
时,输出结果为 NULL
。
示例
sql
-- 从'2020-10-20 12:30:25.5020555'日期值中提取'year'的部分
SQL> SELECT DATE_PART('year', '2020-10-20 12:30:25.5020555');
+--------------+
| EXPR1 |
+--------------+
| 2.020000e+03 |
+--------------+
-- 从'2020-10-20 12:30:25.5020555'日期值中提取'month'的部分
SQL> SELECT DATE_PART('mon', '2020-10-20 12:30:25.5020555');
+--------------+
| EXPR1 |
+--------------+
| 1.000000e+01 |
+--------------+
-- 从'2020-10-20 12:30:25.5020555'日期值中提取'hour'的部分
SQL> SELECT DATE_PART('hrs', '2020-10-20 12:30:25.5020555');
+--------------+
| EXPR1 |
+--------------+
| 1.200000e+01 |
+--------------+