更新时间:2024-06-29 GMT+08:00
分享

时间/日期函数

age(timestamp, timestamp)

描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。

返回值类型:interval

示例:

1
2
3
4
5
SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');
           age           
-------------------------
 43 years 9 mons 27 days
(1 row)

age(timestamp)

描述:当前时间和参数相减。

返回值类型:interval

示例:

1
2
3
4
5
SELECT age(timestamp '1957-06-13');
           age           
-------------------------
 60 years 2 mons 18 days
(1 row)

adddate(date, interval | int)

描述:返回给定日期时间加上指定单位的时间间隔的结果。默认单位(即第二个参数为整型时)为天数。

返回值类型:timestamp

示例:

当入参为text类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
select adddate('2020-11-13', 10);
  adddate
------------
 2020-11-23
(1 row)

select adddate('2020-11-13', interval '1' month);
  adddate
------------
 2020-12-13
(1 row)

select adddate('2020-11-13 12:15:16', interval '1' month);
       adddate
---------------------
 2020-12-13 12:15:16
(1 row)


select adddate('2020-11-13', interval '1' minute);
       adddate
---------------------
 2020-11-13 00:01:00
(1 row)

当入参为date类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
select adddate(current_date, 10);
  adddate
------------
 2021-09-24
(1 row)

select adddate(date '2020-11-13', interval '1' month);
       adddate
---------------------
 2020-12-13 00:00:00
(1 row)

addtime(timestamp | time | text, interval | text)

描述:返回给定日期/时间加上指定时间间隔的结果。该函数仅8.2.0及以上集群版本支持。

返回值类型:与第一个入参类型相同。

示例:

1
2
3
4
5
select addtime('2020-11-13 01:01:01', '23:59:59');
       addtime
---------------------
 2020-11-14 01:01:00
(1 row)

subdate(date, interval | int)

描述:返回给定日期时间减去指定单位的时间间隔的结果; 默认单位(即第二个参数为整型时)为天数。

返回值类型:timestamp

示例:

当入参为text类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select subdate('2020-11-13', 10);
  subdate
------------
 2020-11-03
(1 row)

select subdate('2020-11-13', interval '2' month);
  subdate
------------
 2020-09-13
(1 row)

select subdate('2020-11-13 12:15:16', interval '1' month);
       subdate
---------------------
 2020-10-13 12:15:16
(1 row)

select subdate('2020-11-13', interval '2' minute);
       subdate
---------------------
 2020-11-12 23:58:00
(1 row)

当入参为date类型时:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
select subdate(current_date, 10);
  subdate
------------
 2021-09-05
(1 row)

select subdate(current_date, interval '1' month);
       subdate
---------------------
 2021-08-15 00:00:00
(1 row)

subtime(timestamp | time | text, interval | text)

描述:返回给定日期/时间减去指定时间间隔的结果。该函数仅8.2.0及以上集群版本支持。

返回值类型:与第一个入参类型相同。

示例:

1
2
3
4
5
select subtime('2020-11-13 01:01:01', '23:59:59');
       addtime
---------------------
 2020-11-12 01:01:02
(1 row)

date_add(date, interval)

描述:返回给定日期时间加上指定单位的时间间隔的结果。等效于adddate(date, interval | int)

返回值类型:timestamp

date_sub(date, interval)

描述:返回给定日期时间减去指定单位的时间间隔的结果,等效于subdate(date, interval | int)

返回值类型:timestamp

timestampadd(field, numeric, timestamp)

描述:将以单位field的整数时间间隔(秒数可以带小数)添加到日期时间表达式中。若数值为负,则表示从给定的时间日期时间表达式中减去对应的时间间隔。field支持的参数为year,month,quarter,day,week,hour,minute,second和microsecond。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
select timestampadd(year, 1, timestamp '2020-2-29');
    timestampadd
---------------------
 2021-02-28 00:00:00
(1 row)

select timestampadd(second, 2.354156, timestamp '2020-11-13');
        timestampadd
----------------------------
 2020-11-13 00:00:02.354156
(1 row)

timestampdiff(field, timestamp1, timestamp2)

描述:将两个日期参数相减(timestamp2 - timestamp1),并以单位field作为返回值。若相减值为负,则函数返回值为负。field支持的参数为year、month、quarter、day、week、hour、minute、second和microsecond。

返回值类型:bigint

示例:

1
2
3
4
5
SELECT timestampdiff(day, timestamp '2001-02-01', timestamp '2003-05-01 12:05:55');
 timestampdiff 
---------------
      819
(1 row)

timediff(timestamp | time | text, timestamp | time | text)

描述:将两个日期参数相减。若相减值为负,则函数返回值为负。两个入参类型要求一致。该函数仅8.2.0及以上集群版本支持。

返回值类型:time

示例:

1
2
3
4
5
SELECT timediff('2022-7-5 1:1:1', '2021-7-5 1:1:1');
   timediff 
---------------
  8760:00:00
(1 row)

clock_timestamp()

描述:实时时钟的当前时间戳。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT clock_timestamp();
        clock_timestamp        
-------------------------------
 2017-09-01 16:57:36.636205+08
(1 row)

current_date

描述:当前日期。

返回值类型:date

示例:

1
2
3
4
5
SELECT current_date;
    date    
------------
 2017-09-01
(1 row)

curdate()

描述:当前日期。此函数为Mysql兼容性函数。该函数仅8.2.0及以上集群版本支持。

返回值类型:date

示例:

1
2
3
4
5
SELECT curdate();
   curdate    
------------
 2022-09-19
(1 row)

current_time

描述:当前时间。

返回值类型:time with time zone

示例:

1
2
3
4
5
SELECT current_time;
       timetz       
--------------------
 16:58:07.086215+08
(1 row)

curtime([fsp])

描述:当前时间。fsp为选填参数,参数类型为整型,表示指定返回的小数秒精度。该函数仅8.2.0及以上集群版本支持。

返回值类型:time with time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT curtime();
       timetz       
--------------------
 16:58:07.086215+08
(1 row)
SELECT curtime(2);
       timetz       
--------------------
 16:58:07.08+08
(1 row)

current_timestamp

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT current_timestamp;
       pg_systimestamp        
------------------------------
 2017-09-01 16:58:19.22173+08
(1 row)

convert_tz(timestamp, from_tz, to_tz)

描述:将时间日期值timestamp 从from_tz (text)给出的时区转到to_tz(text)给出的时区,返回转换后的时区时间。该函数仅8.2.0及以上集群版本支持。

返回值类型:timestamp without time zone

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT convert_tz('2018-12-25 13:25:00', '+02:00', '+08:00');
    convert_tz       
--------------------
 2018-12-25 19:25:00
(1 row)
SELECT convert_tz('2000-02-28 23:00:00', 'GMT', 'MET');
    convert_tz       
--------------------
 2000-02-29 00:00:00
(1 row)

datediff(date1, date2)

描述:返回给定日期之间相差的天数值。

返回值类型:integer

示例:

1
2
3
4
5
select datediff(date '2020-11-13', date '2012-10-16');
 datediff
----------
     2950
(1 row)

date_part(text, timestamp)

描述:获取参数text指定的精度

等效于extract(field from timestamp)。

返回值类型:double precision

示例:

1
2
3
4
5
SELECT date_part('hour', timestamp '2001-02-16 20:38:40');
 date_part 
-----------
        20
(1 row)

date_part(text, interval)

描述:获取参数text指定的精度。如果大于12,则取与12的模。

等效于extract(field from timestamp)。

返回值类型:double precision

示例:

1
2
3
4
5
SELECT date_part('month', interval '2 years 3 months');
 date_part 
-----------
         3
(1 row)

date_trunc(text, timestamp)

描述:截取到参数text指定的精度。

返回值类型:timestamp

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT date_trunc('hour', timestamp  '2001-02-16 20:38:40');
     date_trunc      
---------------------
 2001-02-16 20:00:00
(1 row)

--获取去年的最后一天
SELECT date_trunc('day', date_trunc('year',CURRENT_DATE)+ '-1');
       date_trunc
------------------------
 2022-12-31 00:00:00+00
(1 row)

--获取今年的第一天
SELECT date_trunc('year',CURRENT_DATE);
       date_trunc
------------------------
 2023-01-01 00:00:00+00
(1 row)

--获取去年的第一天
SELECT date_trunc('year',now() + '-1 year');
       date_trunc
------------------------
 2022-01-01 00:00:00+00
(1 row)

trunc(timestamp)

描述:默认按天截取。

返回值类型:timestamp

示例:

1
2
3
4
SELECT trunc(timestamp  '2001-02-16 20:38:40');                                                                                                                                                                   trunc
---------------------
2001-02-16 00:00:00
(1 row)

extract(field from timestamp)

描述:获取field指定精度的值。field的有效值参见EXTRACT

返回值类型:double precision

示例:

1
2
3
4
5
SELECT extract(hour from timestamp '2001-02-16 20:38:40');
 date_part 
-----------
        20
(1 row)

extract(field from interval)

描述:获取field指定精度的值。如果大于12,则取与12的模。field的有效值参见EXTRACT

返回值类型:double precision

示例:

1
2
3
4
5
SELECT extract(month from interval '2 years 3 months');
 date_part 
-----------
         3
(1 row)

day(date)

描述:获取日期时间date所处月份中的天数,与dayofmonth函数相同。

取值范围:1~31

返回值类型:integer

示例:

1
2
3
4
5
select day('2020-06-28');
 day
-----
  28
(1 row)

dayofmonth(date)

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

取值范围:1~31

返回值类型:integer

示例:

1
2
3
4
5
select dayofmonth('2020-06-28');
 dayofmonth
------------
         28
(1 row)

dayofweek(date)

描述:返回给定日期date对应的星期索引,星期日作为一周的开始日。

取值范围:1~7

返回值类型:integer

示例:

1
2
3
4
5
select dayofweek('2020-11-22');
 dayofweek
-----------
         1
(1 row)

dayofyear(date)

描述:返回给定日期date在本年中的天数。

取值范围:1~366

返回值类型:integer

示例:

1
2
3
4
5
select dayofyear('2020-02-29');
 dayofyear
-----------
        60
(1 row)

hour(timestamp with time zone)

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

返回值类型:integer

示例:

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

isfinite(date)

描述:测试是否为有限日期。

返回值类型:boolean

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT isfinite(date '2001-02-16');
 isfinite 
----------
 t
(1 row)
SELECT isfinite(date 'infinity');
 isfinite
----------
 f
(1 row)

isfinite(timestamp)

描述:测试判断是否为有限时间。

返回值类型:boolean

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite 
----------
 t
(1 row)
SELECT isfinite(timestamp 'infinity');
 isfinite
----------
 f
(1 row)

isfinite(interval)

描述:测试是否为有限区间。

返回值类型:boolean

示例:

1
2
3
4
5
SELECT isfinite(interval '4 hours');
 isfinite 
----------
 t
(1 row)

justify_days(interval)

描述:将时间间隔以30天为单位,表示为月。

返回值类型:interval

示例:

1
2
3
4
5
SELECT justify_days(interval '35 days');
 justify_days 
--------------
 1 mon 5 days
(1 row)

justify_hours(interval)

描述:将时间间隔以24小时为单位,表示为天。

返回值类型:interval

示例:

1
2
3
4
5
SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS');
 justify_hours  
----------------
 1 day 03:00:00
(1 row)

justify_interval(interval)

描述:结合justify_days和justify_hours,调整interval。

返回值类型:interval

示例:

1
2
3
4
5
SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR');
 justify_interval 
------------------
 29 days 23:00:00
(1 row)

localtime

描述:当前时间。

返回值类型:time

示例:

1
2
3
4
5
SELECT localtime AS RESULT;
     result
----------------
 16:05:55.664681
(1 row)

localtimestamp

描述:当前日期及时间。

返回值类型:timestamp

示例:

1
2
3
4
5
SELECT localtimestamp;
         timestamp          
----------------------------
 2017-09-01 17:03:30.781902
(1 row)

makedate(year, dayofyear)

描述:根据给定的年份和一年中的天数返回相对应的日期值。

返回值类型:date

示例:

1
2
3
4
5
select makedate(2020, 60);
  makedate
------------
 2020-02-29
(1 row)

maketime(hour, minute, second)

描述:根据所给的小时,分钟和秒数返回time类型的值。由于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)

microsecond(timestamp with time zone)

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

返回值类型:integer

示例:

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

minute(timestamp with time zone)

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

返回值类型:integer

示例:

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

month(date)

描述:返回给定日期时间的月份。

返回值类型:integer

示例:

1
2
3
4
5
select month('2020-11-30');
 month
-------
    11
(1 row)

now([fsp])

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

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT now();
              now              
-------------------------------
 2017-09-01 17:03:42.549426+08
(1 row)
1
2
3
4
5
SELECT now(3);
             now    
---------------------------- 
 2021-09-08 10:59:00.427+08
(1 row)        

numtodsinterval(num, interval_unit)

描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。

可以通过设置参数IntervalStyle为oracle,兼容该函数在Oracle中的interval输出格式。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
SELECT numtodsinterval(100, 'HOUR');
 numtodsinterval 
-----------------
 100:00:00
(1 row)

SET intervalstyle = oracle;
SET
SELECT numtodsinterval(100, 'HOUR');
        numtodsinterval
-------------------------------
 +000000004 04:00:00.000000000
(1 row)

pg_sleep(seconds)

描述:是服务器线程延迟时间,以秒记。

返回值类型:void

示例:

1
2
3
4
5
SELECT pg_sleep(10);
 pg_sleep 
----------

(1 row)

period_add(P, N)

描述:返回给定时期加上N个月后的日期。

返回值类型:integer

示例:

1
2
3
4
5
select period_add(200801, 2);
 period_add
------------
     200803
(1 row)

period_diff(P1, P2)

描述:返回给定日期之间的月数差值。

返回值类型:integer

1
2
3
4
5
select period_diff(200802, 200703);
 period_diff
-------------
          11
(1 row)

quarter(date)

描述:获取日期date所属的季度。

返回值类型:integer

示例:

1
2
3
4
5
SELECT quarter(date '2018-12-13');
 quarter
---------
       4
(1 row)

second(timestamp with time zone)

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

返回值类型:integer

示例:

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

statement_timestamp()

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2017-09-01 17:04:39.119267+08
(1 row)

sysdate

描述:当前日期及时间。

返回值类型:timestamp

示例:

1
2
3
4
5
SELECT sysdate;
       sysdate       
---------------------
 2017-09-01 17:04:49
(1 row)

timeofday()

描述:当前日期及时间(像clock_timestamp,但是返回时为text。)

返回值类型:text

示例:

1
2
3
4
5
SELECT timeofday();
              timeofday              
-------------------------------------
 Fri Sep 01 17:05:01.167506 2017 CST
(1 row)

transaction_timestamp()

描述:当前日期及时间,与current_timestamp等效。

返回值类型:timestamp with time zone

示例:

1
2
3
4
5
SELECT transaction_timestamp();
     transaction_timestamp     
-------------------------------
 2017-09-01 17:05:13.534454+08
(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 4th October 08:23:00
(1 row)

unix_timestamp([timestamp with time zone])

描述:获取从'1970-01-01 00:00:00'UTC到入参时间经历的秒数。无入参时,指定为当前时间。

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

示例:

1
2
3
4
5
SELECT unix_timestamp();
 unix_timestamp
----------------
     1693906219
(1 row)
1
2
3
4
5
SELECT unix_timestamp('2018-09-08 12:11:13+06');
 unix_timestamp
----------------
     1536387073.000000
(1 row)

add_months(d,n)

描述:用于计算时间点d再加上n个月的时间。

返回值类型:timestamp

示例:

1
2
3
4
5
SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM dual;
     add_months      
---------------------
 2018-04-29 00:00:00
(1 row)

last_day(d)

描述:用于计算时间点d本月最后一天的时间。

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

示例:

1
2
3
4
5
select last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result;
     cal_result      
---------------------
 2017-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 '2017-05-25 00:00:00','Sunday')AS cal_result;
     cal_result      
---------------------
 2017-05-28 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 '2008-10-07');
 to_days
---------
  733687
(1 row)

相关文档