返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

时间/日期函数

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
-------------------------

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
182
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)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
183

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');

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
184
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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
185
(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)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
186
描述:获取月份的值。如果大于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)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
187

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;

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
188
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)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
189
描述:将数字转换为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
-------------------------------

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
190
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)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
191

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 8c SQL 参考手册
南大通用数据技术股份有限公司
192
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)

tz_offset
描述:将时区别名转换为以UTC 为标准的OFFSET。
返回值类型:varchar
示例:
gbase=# select tz_offset('US/Eastern');
tz_offset

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
193
-----------
-04:00:00
(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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
194

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 转换为外部形式。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
195
参数: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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
196

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()返回当前语句的开始时刻(更准确的说是收到客户端

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
197
最后一条命令的时间)
。statement_timestamp()和transaction_timestamp()在
一个事务的第一
条命令期间返回值相同,但是在随后的命令中却不一定相同。now() 等效于
transaction_timestamp()。
a.
以下接口返回函数被调用时的真实当前时间:
clock_timestamp() timeofday()
clock_timestamp()返回真正的当前时间,因此它的值甚至在同一条SQL 命令中都会变
化。timeofday()和clock_timestamp()相似,timeofday()也返回真实的当前时
间,但是它的
结果是一个格式化的text 串,而不是timestamp with time zone 值。
表5-6 显示了可以用于截断日期和时间值的模板。
表5-6 用于日期/时间截断的模式
类别
模式
描述
微秒
MICROSECON
截断日期/时间,精确到微秒
(000000 - 999999)
US
USEC
USECOND
毫秒
MILLISECON
截断日期/时间,精确到毫秒
(000 - 999)
MS
MSEC
MSECOND

S
截断日期/时间,
精确到秒
(00
- 59)
SEC
SECOND
分钟
M
截断日期/时间,精确到分钟
(00 - 59)
MI

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
198
千年
MIL
截断日期/时间,精确到千年
(本千年的第一天)
MILLENNIA
MILLENNIUM

|
19
|
-15.69
|
20
|

GBase 8a MPP Cluster 的EXPLAIN 命令显示正确的查询计划,对于CBO(基于
成本的优化)的计划,显示每个步骤的评估结果,包括成本、记录条数、记录宽
度、选择率。用户可以在执行SQL 之前查看计划。
语法:

查看SELECT 的查询计划:
EXPLAIN/DESC [extended/partitions] SELECT……

查看CTE 的查询计划:
EXPLAIN/DESC [extended/partitions] WITH……SELECT

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1150
注意
EXPLAIN 与DESC 等价,因此可以互换,用来查看SELECT 的查询计划。