PostgreSQL 教程: date_part 函数

九月 18, 2023

摘要:在本教程中,我们将向您介绍 PostgreSQL 的DATE_PART()函数,该函数允许您从日期时间值检索子字段,例如年、月、周。

PostgreSQL DATE_PART 函数简介

DATE_PART()函数从日期或时间值中提取子字段。下面说明了DATE_PART()函数:

DATE_PART(field, source)

field是一个标识符,用于确定从source中提取哪部分的字段。field的值必须位于下面提到的允许值列表中:

  • century
  • decade
  • year
  • month
  • day
  • hour
  • minute
  • second
  • microseconds
  • milliseconds
  • dow
  • doy
  • epoch
  • isodow
  • isoyear
  • timezone
  • timezone_hour
  • timezone_minute

source是一个时间表达式,其计算结果为TIMESTAMPTIMEINTERVAL。如果source的计算结果为DATE,则该函数将转换为TIMESTAMP

DATE_PART()函数返回一个双精度浮点数类型的值。

PostgreSQL DATE_PART 示例

以下示例从时间戳中提取世纪部分:

SELECT date_part('century', TIMESTAMP '2017-01-01');
 date_part
-----------
        21
(1 row)

要从同一时间戳中提取年份,请将 ‘year’ 传递给field参数:

SELECT date_part('year', TIMESTAMP '2017-01-01');
 date_part
-----------
      2017
(1 row)

要提取季度部分,请使用以下语句:

SELECT date_part('quarter', TIMESTAMP '2017-01-01');
 date_part
-----------
         1
(1 row)

要获取月份,请将month传递给DATE_PART()函数:

SELECT date_part('month', TIMESTAMP '2017-09-30');
 date_part
-----------
         9
(1 row)

要从时间戳中获取十年(decade)部分,您可以使用以下语句:

SELECT date_part('decade', TIMESTAMP '2017-09-30');
 date_part
-----------
       201
(1 row)

要从时间戳中提取周数,请将 ‘week’ 作为第一个参数传递:

SELECT date_part('week', TIMESTAMP '2017-09-30');
 date_part
-----------
        39
(1 row)

要获取当前的千年(millennium),可使用DATE_PART()NOW()函数,如下所示:

SELECT date_part('millennium', now());
 date_part
-----------
         3
(1 row)

要从时间戳中提取日期(day)部分,请将day值传递给DATE_PART()函数:

SELECT date_part('day', TIMESTAMP '2017-03-18 10:20:30');
 date_part
-----------
        18
(1 row)

要从时间戳中提取小时、分钟、秒,请将相应的hourminutesecond传递给DATE_PART()函数:

SELECT date_part('hour', TIMESTAMP '2017-03-18 10:20:30') h,
       date_part('minute', TIMESTAMP '2017-03-18 10:20:30') m,
       date_part('second', TIMESTAMP '2017-03-18 10:20:30') s;
 h  | m  | s
----+----+----
 10 | 20 | 30
(1 row)

要从时间戳中提取星期几和一年中的哪一天,可使用以下语句:

SELECT date_part('dow', TIMESTAMP '2017-03-18 10:20:30') dow,
       date_part('doy', TIMESTAMP '2017-03-18 10:20:30') doy;
 dow | doy
-----+-----
   6 |  77
(1 row)

在本教程中,您学习了如何使用 PostgreSQL 的DATE_PART()函数提取时间戳的子字段。