暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8c 函数和操作符 - 时间和日期处理函数和操作符 之 时间/日期函数

菁菁 2022-10-25
723

  • age(timestamp, timestamp)

描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。两个参数类型必须相同,可以都带timezone,或都不带timezone。

返回值类型:interval

示例:

gbase=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');

           age           

-------------------------

 43 years 9 mons 27 days

(1 row)

  • age(timestamp)

描述:当前时间和参数相减,入参可以带或者不带timezone。

返回值类型:interval

示例:

gbase=# SELECT age(timestamp '1957-06-13');

           age

-------------------------

 64 years 11 mons 4 days

(1 row)

  • clock_timestamp()

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

返回值类型:timestamp with time zone

示例:

gbase=# SELECT clock_timestamp();

        clock_timestamp

-------------------------------

 2022-05-17 16:34:14.629575+08

(1 row)

  • current_date

描述:当前时间。

返回值类型:date

示例:

gbase=# SELECT current_date;

    date

------------

 2022-05-17

(1 row)

  • current_time

描述:当前时间。

返回值类型:time with time zone

示例:

gbase=# SELECT current_time;

       timetz

--------------------

 16:35:00.099149+08

(1 row)

  • current_timestamp

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

gbase=# SELECT current_timestamp;

        pg_systimestamp

-------------------------------

 2022-05-17 16:35:08.018834+08

(1 row)

  • date_part(text, timestamp)

描述:获取日期/时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。

timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。

返回值类型:date

示例:

gbase=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40');

 date_part

-----------

        20

(1 row)

  • date_part(text, interval)

描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与

12的模。等效于extract(field from timestamp)。

返回值类型:double precision

示例:

gbase=# SELECT date_part('month', interval '2 years 3 months'); 

date_part

-----------

3

(1 row)

  • date_trunc(text, timestamp)

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

返回值类型:interval、timestamp with time zone、timestamp without time zone

示例:

gbase=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40');

 date_trunc

---------------------

 2001-02-16 20:00:00

(1 row)

  • trunc(timestamp)

描述:默认按天截取。示例:

gbase=# SELECT trunc(timestamp '2001-02-16 20:38:40');

trunc

---------------------

2001-02-16 00:00:00

(1 row)

  • trunc(arg1, arg2)

描述:截取到arg2指定的精度。

arg1类型:interval、timestamp with time zone、timestamp without time zone

arg2类型:text

返回值类型:interval、timestamp with time zone、timestamp without time zone

示例:

gbase=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour');

trunc

---------------------

 2001-02-16 20:00:00

(1 row)

  • daterange(arg1, arg2)

描述:获取时间边界信息。arg1和arg2的类型为date。

返回值类型:daterange 示例:

gbase=# select daterange('2000-05-06','2000-08-08');

 daterange

-------------------------

[2000-05-06,2000-08-08)

(1 row)

  • daterange(arg1, arg2, text)

描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。返回值类型:daterange

示例:

gbase=# select daterange('2000-05-06','2000-08-08','[]');

 daterange

-------------------------

[2000-05-06,2000-08-09)

(1 row)

  • extract(field from timestamp)

描述:获取小时的值。

返回值类型:double precision

示例:

gbase=# SELECT extract(hour from timestamp '2001-02-16 20:38:40');

 date_part

-----------

20

(1 row)

  • extract(field from interval)

描述:获取月份的值。如果大于12,则取与12的模。返回值类型:double precision

示例:

gbase=# SELECT extract(month from interval '2 years 3 months');

 date_part

-----------

3

(1 row)

  • isfinite(date)

描述:测试是否为有效日期。返回值类型:Boolean

示例:

gbase=# SELECT isfinite(date '2001-02-16');

 isfinite

----------

t

(1 row)

  • isfinite(timestamp)

描述:测试判断是否为有效时间。返回值类型:Boolean

示例:

gbase=# SELECT isfinite(timestamp '2001-02-16 21:28:30');

isfinite

----------

t

(1 row)

  • isfinite(interval)

描述:测试是否为有效区间。返回值类型:Boolean

示例:

gbase=# SELECT isfinite(interval '4 hours');

isfinite

----------

t

(1 row)

  • justify_days(interval)

描述:将时间间隔以月(30天为一月)为单位。返回值类型:interval

示例:

gbase=# SELECT justify_days(interval '35 days');

 justify_days

--------------

1 mon 5 days

(1 row)

  • justify_hours(interval)

描述:将时间间隔以天(24小时为一天)为单位。返回值类型:interval

示例:

gbase=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS');

justify_hours

----------------

1 day 03:00:00

(1 row)

  • justify_interval(interval)

描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval

示例:

gbase=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR');

justify_interval

------------------

29 days 23:00:00

(1 row)

  • localtime

描述:当前时间。

返回值类型:time

示例:

gbase=# SELECT localtime AS RESULT;

     result

-----------------

 16:39:21.245672

(1 row)

  • localtimestamp

描述:当前日期及时间。返回值类型:timestamp 示例:

gbase=# SELECT localtimestamp;

         timestamp

----------------------------

 2022-05-17 16:39:41.292909

(1 row)

  • now()

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

gbase=# SELECT now();

              now

-------------------------------

 2022-05-17 16:47:22.123899+08

(1 row)

  • timenow

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

gbase=# select timenow();

        timenow

------------------------

 2022-05-17 16:55:05+08

(1 row)

  • numtodsinterval(num, interval_unit)

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

可以通过设置参数IntervalStyle为a,兼容该函数interval输出格式。 示例:

gbase=# SELECT numtodsinterval(100, 'HOUR');

numtodsinterval

-----------------

100:00:00

(1 row)

gbase=# SET intervalstyle = a;

SET

gbase=# SELECT numtodsinterval(100, 'HOUR');

numtodsinterval

-------------------------------

+000000004 04:00:00.000000000

(1 row)

  • pg_sleep(seconds)

描述:服务器线程延迟时间,单位为秒。返回值类型:void

示例:

gbase=# SELECT pg_sleep(10);

pg_sleep

----------

(1 row)

  • statement_timestamp()

描述:当前日期及时间。

返回值类型:timestamp with time zone

示例:

gbase=# SELECT statement_timestamp();

     statement_timestamp

-------------------------------

 2022-05-17 16:56:15.024107+08

(1 row)

  • sysdate

描述:当前日期及时间。

返回值类型:timestamp

示例:

gbase=# SELECT sysdate;

       sysdate

---------------------

 2022-05-17 16:56:35

(1 row)

  • timeofday()

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

示例:

gbase=# SELECT timeofday();

              timeofday

-------------------------------------

 Tue May 17 16:56:58.381310 2022 CST

(1 row)

  • transaction_timestamp()

描述:当前日期及时间,与current_timestamp等效。返回值类型:timestamp with time zone

示例:

gbase=# SELECT transaction_timestamp();

     transaction_timestamp

-------------------------------

 2022-05-17 16:57:15.156131+08

(1 row)

  • add_months(d,n)

描述:用于计算时间点d再加上n个月的时间。返回值类型:timestamp

示例:

gbase=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy;

     add_months

---------------------

 2018-04-29 00:00:00

(1 row)

  • last_day(d)

描述:用于计算时间点d当月最后一天的时间。返回值类型:timestamp

示例:

gbase=# 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)的时间。返回值类型:timestamp

示例:

gbase=# select next_day(timestamp '2017-05-25 00:00:00','Sunday')AS cal_result;

cal_result

---------------------

2017-05-28 00:00:00

(1 row)

  • tinterval(abstime, abstime)

描述:用两个绝对时间创建时间间隔。返回值类型:tinterval

示例:

gbase=# call tinterval(abstime 'May 10, 1947 23:59:12', abstime 'Mon May 1 00:30:30 1995');

                      tinterval

-----------------------------------------------------

 ["1947-05-10 23:59:12+09" "1995-05-01 00:30:30+08"]

(1 row)

  • tintervalend(tinterval)

描述:返回tinteval的结束时间。返回值类型:abstime

示例:

gbase=# select tintervalend('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');

      tintervalend

------------------------

 1983-10-04 23:59:12+08

(1 row)

  • tintervalrel(tinterval)

描述:计算并返回tinterval的相对时间。返回值类型:reltime

示例:

gbase=# select tintervalrel('["Sep 4, 1983 23:59:12" "Oct4, 1983 23:59:12"]');

tintervalrel

--------------

 0-1

(1 row)

  • smalldatetime_ge

描述:判断是否第一个参数大于等于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

  • smalldatetime_cmp

描述:对比smalldatetime是否相等。

参数:smalldatetime,   smalldatetime

返回值类型:integer

  • smalldatetime_eq

描述:对比smalldatetime是否相等。

参数:smalldatetime,   smalldatetime

返回值类型:boolean。

  • smalldatetime_gt

描述:判断是否第一个参数大于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

  • smalldatetime_hash

描述:计算timestamp对应的哈希值。

参数:smalldatetime

返回值类型:integer

  • smalldatetime_in

描述:输入timestamp。

参数:cstring, oid, integer

返回值类型:smalldatetime

  • smalldatetime_larger

描述:返回较大的timestamp。

参数:smalldatetime, smalldatetime

返回值类型:smalldatetime

  • smalldatetime_le

描述:判断是否第一个参数小于等于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

  • smalldatetime_lt

描述:判断是否第一个参数小于第二个参数。

参数:smalldatetime, smalldatetime

返回值类型:boolean

  • smalldatetime_ne

描述:比较两个timestamp是否不相等。

参数:smalldatetime, smalldatetime

返回值类型:boolean

  • smalldatetime_out

描述:timestamp转换为外部形式。

参数:smalldatetime

返回值类型:cstring

  • smalldatetime_send

描述:timestamp转换为二进制格式。

参数:smalldatetime

返回值类型:bytea

  • smalldatetime_smaller

描述:返回较小的一个smalldatetime。

参数:smalldatetime, smalldatetime

返回值类型:smalldatetime

  • smalldatetime_to_abstime

描述:smalldatetime转换为abstime。

参数:smalldatetime

返回值类型:abstime

  • smalldatetime_to_time

描述:smalldatetime转换为time。

参数:smalldatetime

返回值类型:time without time zone

  • smalldatetime_to_timestamp

描述:smalldatetime转换为timestamp。

参数:smalldatetime

返回值类型:timestamp without time zone

  • smalldatetime_to_timestamptz

描述:smalldatetime转换为timestamptz。

参数:smalldatetime

返回值类型:timestamp with time zone

  • smalldatetime_to_varchar2

描述:smalldatetime转换为varchar2。

参数:smalldatetime

返回值类型:character varying

获取当前时间有多种方式,请根据实际业务从场景选择合适的接口:

(1) 以下接口按照当前事务的开始时刻返回值:

CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_TIME(precision) CURRENT_TIMESTAMP(precision) LOCALTIME LOCALTIMESTAMP LOCALTIME(precision)

LOCALTIMESTAMP(precision)

其中CURRENT_TIME和CURRENT_TIMESTAMP传递带有时区的值;LOCALTIME和LOCALTIMESTAMP传递的值不带时区。CURRENT_TIME、CURRENT_TIMESTAMP、LOCALTIME和  LOCALTIMESTAMP可以有选择地接受一个精度参数,该精度导致结果的秒域被园整为指定小数位。如果没有精度参数,结果将被给予所能得到的全部精度。

因为这些函数全部都按照当前事务的开始时刻返回结果,所以它们的值在事务运行的整个期间内都不改变。我们认为这是一个特性:目的是为了允许一个事务在“当前”时间上有一致的概念,这样在同一个事务里的多个修改可以保持同样的时间戳。

(2) 以下接口返回当前语句开始时间:

transaction_timestamp() statement_timestamp() now()

其中transaction_timestamp()等价于CURRENT_TIMESTAMP,但是其命名清楚地反映了它的返回值。statement_timestamp()返回当前语句的开始时刻(更准确的说是收到客户端最后一条命令的时间)。statement_timestamp()和transaction_timestamp()在  一个事务的第一条命令期间返回值相同,但是在随后的命令中却不一定相同。now()等效于transaction_timestamp()。

a. 以下接口返回函数被调用时的真实当前时间:

clock_timestamp() timeofday()

clock_timestamp()返回真正的当前时间,因此它的值甚至在同一条 SQL 命令中都会变化。timeofday()和clock_timestamp()相似,timeofday()也返回真实的当前时  间,但是它的结果是一个格式化的text串,而不是timestamp with time zone值。

下表显示了可以用于截断日期和时间值的模板。

                                      表  用于日期/时间截断的模式

类别

模式

描述

微秒

MICROSECON

截断日期/时间,精确到微秒(000000 - 999999)

US

USEC

USECOND

毫秒

MILLISECON

截断日期/时间,精确到毫秒(000 - 999)

MS

MSEC

MSECOND

S

截断日期/时间,精确到秒(00 - 59)

SEC

SECOND

分钟

M

截断日期/时间,精确到分钟(00 - 59)

MI

千年

MIL

截断日期/时间,精确到千年(本千年的第一天)

MILLENNIA

MILLENNIUM

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论