更新时间:2026-01-22 GMT+08:00
分享

时间和日期基本函数

day(date | timestamp with time zone)

描述:获取给定日期时间中的日(即月份中的第几天)。与dayofmonth(date)函数相同。

取值范围:1~31

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT day('2025-06-28');
 day
-----
  28
(1 row)
SELECT day('2025-06-28 09:00:00+08');
 day
-----
  28
(1 row)

weekday(date | timestamp with time zone)

描述:获取给定日期时间对应的星期值,星期一作为一周的开始日。

取值范围:0~6

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT weekday('2020-11-06');
 weekday
---------
       4
(1 row)
SELECT weekday('2020-11-06 09:00:00+08');
 weekday
---------
       4
(1 row)

week(date[, mode])

描述:根据模式(mode)返回指定日期时间所处年份中对应的周数,默认模式为0。

  • date,表示要获取周数的日期。
  • mode,可选参数,指定不同的模式来计算一周的开始和一年的第一周。默认一周的第一天是星期日,也可以指定一周是从星期一还是星期日开始。mode支持的格式如下表所示。

返回值类型:integer

表1 week函数中mode模式的工作原理

模式

一周的第一天

周数范围

第一周的判断规则

0

星期日

0-53

从本年的第一个星期日开始,是第一周。前面的计算为第0周。

1

星期一

0-53

若1月1日到第一个周一的天数超过3天,则计算为本年的第一周。否则为第0周。

2

星期日

1-53

从本年的第一个星期日开始,是第一周。前面的计算为上年度的第5x周。

3

星期一

1-53

若1月1日到第一个周一的天数超过3天,则计算为本年的第一周。否则为上年度的第5x周。

4

星期日

0-53

若1月1日到第一个周日的天数超过3天,则计算为本年的第一周。否则为第0周。

5

星期一

0-53

从本年的第一个星期一开始,是第一周。前面的计算为第0周。

6

星期日

1-53

若1月1日到第一个周日的天数超过3天,则计算为本年的第一周。否则为上年度的第5x周。

7

星期一

1-53

从本年的第一个星期一开始,是第一周。前面的计算为上年度的第5x周。

示例:

获取指定日期的对应周数,默认模式0(周日为一周的第一天)。

1
2
3
4
5
SELECT WEEK('2026-01-01');
 week
------
    0     -- 由于1月1日不在2026年的第一周,根据模式0的规则,它属于上一年的最后一周,因此返回0。
(1 row)

获取指定日期的对应周数,默认模式1(ISO 标准周一为一周的第一天)。

1
2
3
4
5
SELECT WEEK('2026-01-01', 1);
 week
------
    1   -- 根据模式1的规则,2026年1月1日属于当年的第一周。
(1 row)

month(date | timestamp with time zone)

描述:获取给定日期时间的月份部分。

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT month('2025-11-30');
 month
-------
    11
(1 row)
SELECT month('2025-11-30 09:00:00+08');
 month
-------
    11
(1 row)

quarter(date | timestamp with time zone)

描述:获取给定日期时间所属的季度。季度范围为1~4。

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT quarter(date '2025-12-13');
 quarter
---------
       4
(1 row)
SELECT quarter('2025-03-20 09:00:00+08');
 quarter
---------
       1
(1 row)

year(date | timestamp with time zone)

描述:获取给定日期时间所处的年份。

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT year('2025-11-13');
 year
------
 2025
(1 row)
SELECT year('2025-11-13 09:00:00+08');
 year
------
 2025
(1 row)

yearweek(date[, mode])

描述:获取给定日期时间在本年中对应的年份和周数,周数范围为1~53。

参数说明:

  • date,输入的日期或时间戳。
  • mode,可选参数,整数类型,用于确定周数计算的逻辑,标准的mode取值范围为0~7。参考表1

    该函数支持更广泛的整数mode输入。输入的mode值会按照公式 (mode % 8 + 8) % 8 映射到 0~7 的标准模式范围内。例如,输入8等同于0,输入-1等同于7,输入-2 等同于6。支持输入任意32位整数(如2147483647)。

返回值类型:integer

示例:

返回给定日期对应的年份和周数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT yearweek('2025-11-13');
 yearweek
----------
   202545
(1 row)
SELECT yearweek('2025-1-1');
 yearweek
----------
   202452
(1 row)

指定mode值为-2(-2映射为6),表示周从星期日开始,2024年1月1日(星期一)属于第1周的第二天,2024年1月1日属于第1周。

1
2
3
4
5
SELECT yearweek('2024-1-1', -2);
 yearweek 
----------
   202401
(1 row)

指定mode值为-6(-6映射为2),表示周从星期三开始,2024年1月1日(星期一)属于上一年的最后一周(即2023年的第53周)。

1
2
3
4
5
SELECT yearweek('2024-1-1', -6);
 yearweek 
----------
   202353
(1 row)

指定mode值为2147483647(2147483647映射为7),表示本年的第一个星期一开始是第一周,2024年1月1日(星期一)属于第1周的第一天,2024年1月1日属于第1周。

1
2
3
4
5
SELECT yearweek('2024-1-1', 2147483647);
 yearweek 
----------
   202401
(1 row)

dayofweek(date | timestamp with time zone)

描述:获取给定日期时间对应的星期值,星期日作为一周的开始日。

取值范围:1~7

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT dayofweek('2025-11-22');
 dayofweek
-----------
         7
(1 row)
SELECT dayofweek('2025-11-22 09:00:00+08');
 dayofweek
-----------
         7
(1 row)

dayofmonth(date | timestamp with time zone)

描述:获取给定日期时间所处月份中的天数。

取值范围:1~31

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT dayofmonth('2025-10-28');
 dayofmonth
------------
         28
(1 row)
SELECT dayofmonth('2025-10-28 09:00:00+08');
 dayofmonth
------------
         28
(1 row)

dayofyear(date | timestamp with time zone)

描述:获取给定日期时间在本年中是第几天。1月1日为第1天,12月31日为365或366天。

取值范围:1~366

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT dayofyear('2025-10-28');
 dayofyear
-----------
       301
(1 row)
SELECT dayofyear('2025-10-28 09:00:00+08');
 dayofyear
-----------
       301
(1 row

weekofyear(date | timestamp with time zone)

描述:获取给定日期时间在本年中是第几周,等价于week(date, 3)。

取值范围:1~53

返回值类型:integer

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT weekofyear('2025-11-30');
 weekofyear
------------
         48
(1 row)
SELECT weekofyear('2025-11-30 09:00:00+08');
 weekofyear
------------
         48
(1 row)

makedate(year, dayofyear)

描述:根据给定的年份和一年中的第几天生成对应的日期值。

返回值类型:date

示例:

1
2
3
4
5
SELECT makedate(2025, 60);
  makedate
------------
 2025-03-01
(1 row)

maketime(hour, minute, second)

描述:根据给定的小时、分钟和秒数生成时间值。

由于GaussDB(DWS)中的time类型的取值范围为00:00:00到24:00:00, 故不支持hour大于24时和hour小于0时的场景。

返回值类型:time

示例:

1
2
3
4
5
SELECT maketime(12, 15, 30.12);
  maketime
-------------
 12:15:30.12
(1 row)

hour(timestamp with time zone)

描述:获取时间中的小时值。

返回值类型:integer

示例:

1
2
3
4
5
SELECT hour(timestamptz '2025-12-13 12:11:15+06');
 hour
------
   14
(1 row)

minute(timestamp with time zone)

描述:获取时间中的分钟值。

返回值类型:integer

示例:

1
2
3
4
5
SELECT minute(timestamptz '2025-12-13 12:11:15+06');
 minute
--------
     11
(1 row)

second(timestamp with time zone)

描述:获取时间的秒数值。

返回值类型:integer

示例:

1
2
3
4
5
SELECT second(timestamptz '2025-12-13 12:11:15+06');
 second
--------
     15
(1 row)

microsecond(timestamp with time zone)

描述:获取时间中的微秒值。

返回值类型:integer

示例:

1
2
3
4
5
SELECT microsecond(timestamptz '2025-12-13 12:11:15.123634+06');
 microsecond
-------------
      123634
(1 row)

from_unixtime(unix_timestamp[,format])

描述:格式串缺省时,将unix时间戳转换为日期时间类型输出。格式串指定时,将unix时间戳转换为指定格式的字符串输出。

返回值类型:timestamp(格式串缺省)/ text(格式串指定)

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT from_unixtime(875996580);
    from_unixtime
---------------------
 1997-10-04 20:23:00
(1 row)
SELECT from_unixtime(875996580, '%Y %D %M %h:%i:%s');
       from_unixtime
---------------------------
 1997 5th October 04:23:00
(1 row)

unix_timestamp([timestamp with time zone])

描述:用于将日期时间值转换为 Unix时间戳(即自1970-01-01 00:00:00 UTC以来经过的秒数)。无入参时,指定为当前时间。

返回值类型:bigint(无入参)/numeric(有入参)

示例:

1
2
3
4
5
SELECT unix_timestamp();
 unix_timestamp
----------------
     1768793418
(1 row)
1
2
3
4
5
SELECT unix_timestamp('2025-09-08 12:11:13+06');
    unix_timestamp
-------------------
 1757311873.000000
(1 row)

now([fsp])

描述:当前事务开始的日期及时间。入参确定微秒输出精度,缺省时为6。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT now();
              now              
-------------------------------
 2026-01-19 11:35:09.082256+08
(1 row)
1
2
3
4
5
SELECT now(3);
             now    
---------------------------- 
 2026-01-19 11:35:31.839+08
(1 row)      

last_day(d)

描述:获取日期或者日期时间中对应月份的最后一天。

返回值类型:

  • ORA和TD兼容模式下,返回值类型为timestamp。
  • MySQL兼容模式下,返回值类型为date。

示例:

1
2
3
4
5
SELECT last_day(to_date('2026-01-01', 'YYYY-MM-DD')) AS cal_result;
     cal_result      
---------------------
 2026-01-31 00:00:00
(1 row)

next_day(x,y)

描述:用于计算给定时间(x)之后第一个匹配目标星期几(y)的日期。

返回值类型:

  • ORA和TD兼容模式下,返回值类型为timestamp。
  • MySQL兼容模式下,返回值类型为date。

示例:

1
2
3
4
5
SELECT next_day(timestamp '2025-05-21 00:00:00','Sunday')AS cal_result;
     cal_result      
---------------------
 2025-05-25 00:00:00
(1 row)

from_days(days)

描述:根据给定的天数,返回对应的日期值。

返回值类型:date

示例:

1
2
3
4
5
SELECT from_days(730669);
 from_days
------------
 2000-07-03
(1 row)

to_days(timestamp)

描述:根据指定日期,返回自0年开始的天数。

返回值类型:integer

示例:

1
2
3
4
5
SELECT to_days(timestamp '2025-10-07');
 to_days
---------
  739896
(1 row)

相关文档