时间/日期函数
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) |
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) |
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) |
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) |
current_time
描述:当前时间。
返回值类型:time with time zone
示例:
1 2 3 4 5 |
SELECT current_time; timetz -------------------- 16:58:07.086215+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) |
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 ; time ---------------- 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); 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) |