Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


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 的结果是 20252022-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 |
    +--------------+