返回首页

gbase数据、南大通用产品文档:GBase8a停止所有节点的集群服务

更新日期:2024年09月11日

操作步骤
步骤1:在所有节点执行集群服务停止命令。
$ gcluster_services all stop
Stopping gcrecover :
[
OK
]
Stopping gcluster :
[
OK
]

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
283
Stopping gbase :
[
OK
]
Stopping syncserver :
[
OK
]
$ gcware_services all stop
Stopping GCWareMonit success!
Stopping gcware :
[
OK
]

本节描述嵌套在另一 SELECT 语句的 WHERE 子句中的 SELECT 语句发生的子查询。
可以将任何关系运算符与 ALL 和 ANY 配合使用来将一些内容与子查询生成的值的每一

(ALL)
或任一个
(ANY)
进行比较。
可以使用关键字 SOME 代替 ANY。
运算符 IN 等
价于 = ANY。要创建相反的搜索条件,使用关键字 NOT 或另一个关系运算符。
EXISTS 运算符对子查询进行测试以了解子查询是否找到了任何值。即,该运算符询问子
查询的结果是否非空。不能在包含具有 TEXT 或 BYTE 数据类型的列的子查询中使用
EXISTS 关键字。
有关用于创建带子查询的条件的语法,请参阅《GBase 8s SQL 指南:语法》。
下列关键字介绍了 SELECT 语句的 WHERE 子句中的子查询。


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 137 -
ALL 关键字
在子查询前面使用 ALL 关键字来确定对返回的每个值的比较是否为 true。如果子查询不
返回任何值,那么搜索条件为 true。(如果子查询不返回任何值,那么对于所有零值条件
为 true 。)
下列查询列出了包含总价小于订单号 1023 中每个商品的总价的商品的所有订单的以下信
息。
图: 查询
SELECT order_num, stock_num, manu_code, total_price
FROM items
WHERE total_price < ALL
(SELECT total_price FROM items
WHERE order_num = 1023);
图: 查询结果
order_num stock_num manu_code total_price

1003 9 ANZ $20.00
1005 6 SMT $36.00
1006 6 SMT $36.00
1010 6 SMT $36.00
1013 5 ANZ $19.80
1013 6 SMT $36.00
1018 302 KAR $15.00

ANY 关键字
在子查询前面使用关键字 ANY (或它的同义词 SOME)来确定是否对至少一个返回值的
比较为 true 。如果子查询不返回任何值,那么搜索条件为false。(因为没有值存在,所以
对于其中一个值条件不能为 true 。)
以下查询查找包含总价大于订单号 1005 中任何一个商品总价的商品的所有订单的订单号。

图: 查询
SELECT DISTINCT order_num
FROM items
WHERE total_price > ANY
(SELECT total_price
FROM items
WHERE order_num = 1005);

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 138 -
图: 查询结果
order_num

1001
1002
1003
1004

1020
1021
1022
1023

单值子查询
如果您知道子查询可能对外部级别查询返回刚好一个值,那么不需要 ALL 或 ANY 。可
如同对待函数一样对待只返回一个值的子查询。这种子查询通常使用聚集函数,原因是聚
集函数总是返回单个的。
下列查询在子查询中使用聚集函数 MAX 查找包括最大排球网数目的订单的 order_num。
图: 查询
SELECT order_num FROM items
WHERE stock_num = 9
AND quantity =
(SELECT MAX (quantity)
FROM items
WHERE stock_num = 9);
图: 查询结果
order_num

1012
下列查询在子查询中使用聚集函数 MIN 选择总价高于最小价格 10 倍的商品。
图: 查询
SELECT order_num, stock_num, manu_code, total_price
FROM items x
WHERE total_price >
(SELECT 10 * MIN (total_price)

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 139 -
FROM items
WHERE order_num = x.order_num);
图: 查询结果
order_num stock_num manu_code total_price

1003 8 ANZ $840.00
1018 307 PRC $500.00
1018 110 PRC $236.00
1018 304 HRO $280.00

相关子查询
相关子查询是引用不在其 FROM 子句中的列或表的子查询。该列可以在 Projection 子句
或 WHERE 子句中。
通常,相关子查询会降低性能。建议使用表名或表别名限制子查询中的列名。从而除去与
列所驻留的表相关的任何疑问。
下列查询是相关子查询的一个示例,它返回 orders 表中 10 个最近的装运日期的列表。它
在子查询之后加上 ORDER BY 子句以对结果进行排序,
原因是
(除在 FROM 子句以外)
您不能在子查询中包括 ORDER BY 。
图: 查询
SELECT po_num, ship_date FROM orders main
WHERE 10 >
(SELECT COUNT (DISTINCT ship_date)
FROM orders sub
WHERE sub.ship_date < main.ship_date)
AND ship_date IS NOT NULL
ORDER BY ship_date, po_num;
因为子查询产生的数取决于 main.ship_date(外部 SELECT 产生的一个值),所以该子查
询是相关的。因此,必须对外部查询考虑的每一行重新执行子查询。
该查询使用 COUNT 函数来将值返回到主查询。然后,ORDER BY 子句对数据进行排序。
查询找到并返回具有 10 个最新装运日期的 16 行,如下所示。
图: 查询结果
po_num ship_date

4745 06/21/1998
278701 06/29/1998

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 140 -
429Q 06/29/1998
8052 07/03/1998
B77897 07/03/1998
LZ230 07/06/1998
B77930 07/10/1998
PC6782 07/12/1998
DM354331 07/13/1998
S22942 07/13/1998
MA003 07/16/1998
W2286 07/16/1998
Z55709 07/16/1998
C3288 07/25/1998
KF2961 07/30/1998
W9925 07/30/1998
如果对大型表使用相关子查询(如图 1),那么应对 ship_date 列建立索引以提高性能。否
则,此 SELECT 语句效率降低,原因是它对表的每一行执行一次子查询。有关建立索引和
性能问题的信息,请参阅《GBase 8s 管理员指南》 和 GBase 8s 性能指南 。
然而,不能在 FROM 子句中使用相关子查询,如下列无效示例所示:
SELECT item_num, stock_num FROM items,
(SELECT stock_num FROM catalog
WHERE stock_num = items.item_num) AS vtab;
该示例中的子查询具有错误 -24138:
ALL COLUMN REFERENCES IN A TABLE EXPRESSION MUST REFER
TO TABLES IN THE FROM CLAUSE OF THE TABLE EXPRESSION.
数据库服务器发出该错误的原因是子查询中的 items.item_num 列还出现在外部查询的
Projection 子句中,但是内部查询的 FROM 子句仅指定catalog 表。
错误消息文本中的术语
表表达式指的是 FROM 子句中的子查询返回的列值或表达式集合。而在 FROM 子句中,
只有不相关子查询才是有效的。

EXISTS 关键字
关键字 EXISTS 也被称为存在限定符,因为仅当外部 SELECT(如下所示)找到至少一行
时,子查询才为 true 。
图: 查询
SELECT UNIQUE manu_name, lead_time
FROM manufact

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 141 -
WHERE EXISTS
(SELECT * FROM stock
WHERE description MATCHES '*shoe*'
AND manufact.manu_code = stock.manu_code);
通常可使用 EXISTS 来构造等价于使用 IN 的查询的查询。
下列查询使用 IN 谓词来构造
与上述返回相同结果的查询。
图: 查询
SELECT UNIQUE manu_name, lead_time
FROM stock, manufact
WHERE manufact.manu_code IN
(SELECT manu_code FROM stock
WHERE description MATCHES '*shoe*')
AND stock.manu_code = manufact.manu_code;
图 1和图 2返回生产某种鞋的制造商以及预订产品的交付周期的行。
该结果显示了返回值。

图: 查询结果
manu_name lead_time

Anza 5
Hero 4
Karsten 21
Nikolus 8
ProCycle 9
Shimara 30
将关键字 NOT 添加至 IN 或 EXISTS 以创建与前面查询相反的搜索条件。也可以
用 !=ALL 代替 NOT IN。
下列查询显示了执行同一操作的两种方法。一种方法可能允许数据库服务器执行相对另一
种方法较少的工作,则会取决于数据库的设计和表的大小。要了解哪一种查询更好,使用
SET EXPLAIN 命令来获取查询计划的清单。在 GBase 8s 性能指南 和 GBase 8s SQL 指南:
语法 中讨论了 SET EXPLAIN。
图: 查询
SELECT customer_num, company FROM customer
WHERE customer_num NOT IN
(SELECT customer_num FROM orders
WHERE customer.customer_num = orders.customer_num);


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 142 -
SELECT customer_num, company FROM customer
WHERE NOT EXISTS
(SELECT * FROM orders
WHERE customer.customer_num = orders.customer_num);
查询中的每个语句返回下列行,这些行标识尚未下订单的客户。
图: 查询结果
customer_num company

102 Sports Spot
103 Phil's Sports
105 Los Altos Sports
107 Athletic Supplies
108 Quinn's Sports
109 Sport Stuff
113 Sportstown
114 Sporting Place
118 Blue Ribbon Sports
125 Total Fitness Sports
128 Phoenix University
关键字 EXISTS 和 IN 用于称为相交的集合运算,
关键 NOT EXISTS 和 NOT IN 用于称
为差异的集合运算。这些概念在集合运算中讨论。
下列查询执行对 items 表的子查询来标识 stock 表中尚未预订的所有商品。
图: 查询
SELECT * FROM stock
WHERE NOT EXISTS
(SELECT * FROM items
WHERE stock.stock_num = items.stock_num
AND stock.manu_code = items.manu_code);
该查询返回以下行。
图: 查询结果
stock_num manu_code description unit_price unit unit_descr

101 PRC bicycle tires $88.00 box 4/box
102 SHM bicycle brakes $220.00 case 4 sets/case
102 PRC bicycle brakes $480.00 case 4 sets/case

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 143 -
105 PRC bicycle wheels $53.00 pair pair

312 HRO racer goggles $72.00 box 12/box
313 SHM swim cap $72.00 box 12/box
313 ANZ swim cap $60.00 box 12/box
对 SELECT 语句可具有的子查询数没有逻辑限制。
您可能想要检查是否在数据库中正确输入了信息。查找数据库中的错误的一种方法是编写
仅当错误存在时才会返回输出的查询。这种类型的子查询充当一种审计查询,如下所示。
图: 查询
SELECT * FROM items
WHERE total_price != quantity *
(SELECT unit_price FROM stock
WHERE stock.stock_num = items.stock_num
AND stock.manu_code = items.manu_code);
该查询只返回订单上商品的总价格不等于库存单价乘以订单数量的行。如果没有应用任何
折扣,
那么可能在数据库中不正确地输入了此类型的行。
仅当错误发生时查询才会返回行。
如果正确地将信息插入到数据库中,那么不会返回任何行。
图: 查询结果
item_num order_num stock_num manu_code quantity total_price

1 1004 1 HRO 1 $960.00
2 1006 5 NRG 5 $190.00

时间/日期函数

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