返回首页

gbase数据、南大通用产品文档:GBase8aDATE_FORMAT(date,FORMAT)

更新日期:2024年09月11日

函数说明
依照FORMAT 字符串格式化date 值。
下面的格式可被用于format 字符串中:
表5- 22 格式说明




%a
星期名的英文缩写形式(Sun...Sat)
%b
月份的英文缩写形式(Jan...DEC)
%c
月份的数字形式(0...12)
%D
有英文后缀的某月的第几天(0th, 1st, 2nd, 3rd...)
%d
月份中的天数,数字形式(00...31)
%e
月份中的天数,数字形式(0...31)
%f
微秒(000000...999999)
%H
小时,24 小时制(00...23)
%h
小时,12 小时制(0,1...12)
%I
小时,12 小时制,个位数字前加0(01...12)
%i
分钟,数字形式(00...59)
%j
一年中的天数(001...366)
%k
小时,24 小时制(0...23)
%l
小时,12 小时制(1...12)
%M
月份,英文形式全拼(January...December)
%m
月份,数字形式(00...12)
%p
AM 或PM
%r
时间,12 小时制(HH:MI:SS 后面紧跟AM 或PM)
%S
秒(00...59)
%s
秒(00...59)
%T
时间,24 小时(HH:MI:SS)
%U
星期(00...53),星期日是一个星期的第一天
%u
星期(00...53),星期一是一个星期的第一天
%V
星期(01...53),星期日是一个星期的第一天
与“%X”一起使用
%v
星期(01...53),星期一是一个星期的第一天
与“%x”一起使用
%W
星期名的英文全拼形式(Sunday...Saturday)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
792




%w
一星期中的哪一天(0=Sunday...6=Saturday)
%X
以4 位数字形式反映周所在的年份
%x
以4 位数字形式反映周所在的年份
%Y
4 位数字形式表达的年份
%y
2 位数字形式表达的年份
%%
一个字符“%”
%.
除字母、数字和空格外的一个或多个字符
%@
一个或多个字母
%#
一个或对多个数字
所有其它的字符不经过解释,直接复制到结果中。
注意
“%”字符要求在格式指定符之前。
示例
示例1:FORMAT 格式为“%W %M %Y”。
gbase> SELECT DATE_FORMAT('2020-10-04 22:23:00', '%W %M %Y')
FROM dual;
+------------------------------------------------+
| DATE_FORMAT('2020-10-04 22:23:00', '%W %M %Y') |
+------------------------------------------------+
| Sunday October 2020
|
+------------------------------------------------+
1 row in set
示例2:FORMAT 格式为“%H:%i:%s”。
gbase> SELECT DATE_FORMAT('2020-10-04 22:23:00', '%H:%i:%s')
FROM dual;
+------------------------------------------------+
| DATE_FORMAT('2020-10-04 22:23:00', '%H:%i:%s') |
+------------------------------------------------+
| 22:23:00
|
+------------------------------------------------+
1 row in set
示例3:FORMAT 格式为“%D %y %a %d %m %b %j”。
gbase> SELECT DATE_FORMAT('2020-10-04
22:23:00','%D %y %a %d %m %b %j') FROM dual;
+-----------------------------------------------------------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
793
| DATE_FORMAT('2020-10-04 22:23:00','%D %y %a %d %m %b %j') |
+-----------------------------------------------------------+
| 4th 20 Sun 04 10 Oct 278
|
+-----------------------------------------------------------+
1 row in set
示例4:FORMAT 格式为“%H %k %I %r %T %S %w”。
gbase> SELECT DATE_FORMAT('2020-10-04
22:23:00','%H %k %I %r %T %S %w') FROM dual;
+-----------------------------------------------------------+
| DATE_FORMAT('2020-10-04 22:23:00','%H %k %I %r %T %S %w') |
+-----------------------------------------------------------+
| 22 22 10 10:23:00 PM 22:23:00 00 0
|
+-----------------------------------------------------------+
1 row in set
示例5:FORMAT 格式为“%X %V”。
gbase> SELECT DATE_FORMAT('2020-01-01', '%X %V') FROM dual;
+------------------------------------+
| DATE_FORMAT('2020-01-01', '%X %V') |
+------------------------------------+
| 2019 52
|
+------------------------------------+
1 row in set

功能描述
修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置
表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。
注意事项

表的所有者被授予了表ALTER 权限的用户或被授予ALTER ANY TABLE的用户有权限
执行ALTER TABLE 命令,
系统管理员默认拥有此权限。
但要修改表的所有者或者修改
表的模式,
当前用户必须是该表的所有者或者系统管理员,
且该用户是新所有者角色的
成员。

不能修改分区表的tablespace,但可以修改分区的tablespace。

不支持修改存储参数ORIENTATION。

SET SCHEMA 操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。

列存表只支持PARTIAL CLUSTER KEY、UNIQUE、PRIMARY KEY 表级约束,不支
持外键等表级约束。

列存表只支持添加字段ADD COLUMN、修改字段的数据类型ALTER TYPE、设置单
个字段的收集目标SET STATISTICS、支持更改表名称、支持更改表空间、支持删除字

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
755
段DROP COLUMN。对于添加的字段和修改的字段类型要求是列存支持的数据类型。
ALTER TYPE 的USING 选项只支持常量表达式和涉及本字段的表达式,暂不支持涉及
其他字段的表达式。

列存表支持的字段约束包括NULL、NOT NULL、DEFAULT 常量值、UNIQUE 和
PRIMARY KEY;
对字段约束的修改当前只支持对DEFAULT 值的修改
(SET DEFAULT)
和删除(DROP DEFAULT)
,暂不支持对非空约束NULL/NOT NULL 的修改。

不支持增加自增列,或者增加DEFAULT 值中包含nextval()表达式的列。

不支持对外表、临时表开启行访问控制开关。

通过约束名删除PRIMARY KEY 约束时,不会删除NOT NULL 约束,如果有需要,请
手动删除NOT NULL 约束。

使用JDBC 时,支持通过PrepareStatement 对DEFAUTL 值进行参数化设置。
语法格式

修改表的定义。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) }
action [, ... ];
其中具体表操作action 可以是以下子句之一:
column_clause
| ADD table_constraint [ NOT VALID ]
| ADD table_constraint_using_index
| VALIDATE CONSTRAINT constraint_name
| DROP CONSTRAINT [ IF EXISTS ]
constraint_name [ RESTRICT | CASCADE ]
| CLUSTER ON index_name
| SET WITHOUT CLUSTER
| SET ( {storage_parameter = value} [, ... ] )
| RESET ( storage_parameter [, ... ] )
| OWNER TO new_owner
| SET TABLESPACE new_tablespace
| SET {COMPRESS|NOCOMPRESS}
| TO { GROUP groupname | NODE ( nodename [, ... ] ) }
| ADD NODE ( nodename [, ... ] )
| DELETE NODE ( nodename [, ... ] )
| UPDATE SLICE LIKE table_name
| DISABLE TRIGGER [ trigger_name | ALL | USER ]
| ENABLE TRIGGER [ trigger_name | ALL | USER ]

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
756
| ENABLE REPLICA TRIGGER trigger_name
| ENABLE ALWAYS TRIGGER trigger_name
| ENABLE ROW LEVEL SECURITY
| DISABLE ROW LEVEL SECURITY
| FORCE ROW LEVEL SECURITY
| NO FORCE ROW LEVEL SECURITY
| ENCRYPTION KEY ROTATION

ADD table_constraint [ NOT VALID ] > 给表增加一个新的约束。

ADD table_constraint_using_index > 根据已有唯一索引为表增加主键约束或唯一约
束。

VALIDATE CONSTRAINT constraint_name > 验证一个使用NOT VALID 选项创建
的检查类约束,
通过扫描全表来保证所有记录都符合约束条件。
如果约束已标记为
有效时,什么操作也不会发生。

DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] >
删除一个表上的约束。

CLUSTER ON index_name > 为将来的CLUSTER(聚簇)操作选择默认索引。实
际上并没有重新盘簇化处理该表。

SET WITHOUT CLUSTER > 从表中删除最新使用的CLUSTER 索引。这样会影响
将来那些没有声明索引的CLUSTER(聚簇)操作。

SET ( {storage_parameter = value} [, … ] ) > 修改表的一个或多个存储参数。

RESET ( storage_parameter [, … ] ) > 重置表的一个或多个存储参数。
与SET 一样,
根据参数的不同可能需要重写表才能获得想要的效果。

OWNER TO new_owner > 将表、序列、视图的属主改变成指定的用户。

SET TABLESPACE new_tablespace > 这种形式将表空间修改为指定的表空间并将
相关的数据文件移动到新的表空间。
但是表上的所有索引都不会被移动,
索引可以
通过ALTER INDEX 语法的SET TABLESPACE 选项来修改索引的表空间。

SET {COMPRESS|NOCOMPRESS} > 修改表的压缩特性。表压缩特性的改变只会
影响后续批量插入的数据的存储方式,对已有数据的存储毫无影响。
也就是说,表
压缩特性的修改会导致该表中同时存在着已压缩和未压缩的数据。
行存表不支持压
缩。

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

TO { GROUP groupname | NODE ( nodename [, … ] ) } > 此语法仅在扩展模式
(GUC 参数support_extended_features 为on 时)下可用。该模式谨慎打开,主要
供内部扩容工具使用,一般用户不应使用该模式。

ADD NODE ( nodename [, … ] ) > 此语法主要供内部扩容工具使用,一般用户不
建议使用。

DELETE NODE ( nodename [, … ] ) > 此语法主要供内部缩容工具使用,
一般用户
不建议使用。

DISABLE TRIGGER [ trigger_name | ALL | USER ] > 禁用trigger_name 所表示的单
个触发器,或禁用所有触发器,
或仅禁用用户触发器(此选项不包括内部生成的约
束触发器,例如,可延迟唯一性和排除约束的约束触发器)
。> 应谨慎使用此功
能,因为如果不执行触发器,则无法保证原先期望的约束的完整性。

| ENABLE TRIGGER [ trigger_name | ALL | USER ] > 启用trigger_name 所表示的单
个触发器,或启用所有触发器,或仅启用用户触发器。

| ENABLE REPLICA TRIGGER trigger_name > 触发器触发机制受配置变量
session_replication_role 的影响,当复制角色为“origin”
(默认值)或“local”时,
将触发简单启用的触发器。> 配置为ENABLE REPLICA 的触发器仅在会话处于
“replica”模式时触发。

| ENABLE ALWAYS TRIGGER trigger_name > 无论当前复制模式如何,配置为
ENABLE ALWAYS 的触发器都将触发。

| DISABLE/ENABLE [ REPLICA | ALWAYS ] RULE > 配置属于表的重写规则,已禁
用的规则对系统来说仍然是可见的,只是在查询重写期间不被应用。语义为关闭/
启动规则。
由于关系到视图的实现,
ON SELECT 规则不可禁用。配置为ENABLE
REPLICA 的规则将会仅在会话为”replica” 模式时启动,而配置为ENABLE
ALWAYS 的触发器将总是会启动,不考虑当前复制模式。规则触发机制也受配置
变量session_replication_role 的影响,类似于上述触发器。

| DISABLE/ENABLE ROW LEVEL SECURITY > 开启或关闭表的行访问控制开
关。> 当开启行访问控制开关时,如果未在该数据表定义相关行访问控制策略,
数据表的行级访问将不受影响;
如果关闭表的行访问控制开关,
即使定义了行访问
控制策略,数据表的行访问也不受影响。详细信息参见CREATE ROW LEVEL
SECURITY POLICY 章节。

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

| NO FORCE/FORCE ROW LEVEL SECURITY > 强制开启或关闭表的行访问控制
开关。> 默认情况,表所有者不受行访问控制特性影响,但当强制开启表的行访
问控制开关时,表的所有者(不包含系统管理员用户)会受影响。系统管理员可以
绕过所有的行访问控制策略,不受影响。
其中列相关的操作column_clause 可以是以下子句之一:
ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ]
[ column_constraint [ ... ] ]
| MODIFY column_name data_type
| MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ]
| MODIFY column_name [ CONSTRAINT constraint_name ] NULL
| DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
| ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]
[ USING expression ]
| ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT }
| ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL
| ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer
| ADD STATISTICS (( column_1_name, column_2_name [, ...] ))
| DELETE STATISTICS (( column_1_name, column_2_name [, ...] ))
| ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] )
| ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
| ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }

ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ]
[ column_constraint [ … ] ] 向表中增加一个新的字段。用ADD COLUMN 增加一
个字段,
所有表中现有行都初始化为该字段的缺省值(如果没有声明DEFAULT 子
句,值为NULL)


ADD ( { column_name data_type [ compress_mode ] } [, …] ) 向表中增加多列。

MODIFY
(
{
column_name
data_type
|
column_name
[
CONSTRAINT
constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT
constraint_name ] NULL } [, …] ) 修改表已存在字段的数据类型。

DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] 从表中
删除一个字段,
和这个字段相关的索引和表约束也会被自动删除。
如果任何表之外
的对象依赖于这个字段,必须声明CASCADE ,比如视图。DROP COLUMN 命
令并不是物理上把字段删除,而只是简单地把它标记为对SQL 操作不可见。随后

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
759
对该表的插入和更新将在该字段存储一个NULL。因此,删除一个字段是很快的,
但是它不会立即释放表在磁盘上的空间,
因为被删除了的字段占据的空间还没有回
收。这些空间将在执行VACUUM 时而得到回收。

ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE
collation ] [ USING expression ] 改变表字段的数据类型。该字段涉及的索引和简单
的表约束将被自动地转换为使用新的字段类型,方法是重新分析最初提供的表达
式。ALTER TYPE 要求重写整个表的特性有时候是一个优点,因为重写的过程消
除了表中没用的空间。比如,要想立刻回收被一个已经删除的字段占据的空间,最
快的方法是:
ALTER TABLE table ALTER COLUMN anycol TYPE anytype;
这里的anycol 是任何在表中还存在的字段,
而anytype 是和该字段的原类型一样的类型。
这样的结果是在表上没有任何可见的语意的变化,
但是这个命令强制重写,
这样就删除
了不再使用的数据。

ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT }
为一个字段设置或者删除缺省值。
请注意缺省值只应用于随后的INSERT 命令,

们不会修改表中已经存在的行。
也可以为视图创建缺省,
这个时候它们是在视图的
ON INSERT 规则应用之前插入到INSERT 句中的。

ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL 修改一个字段是否
允许NULL 值或者拒绝NULL 值。
如果表在字段中包含非NULL,
则只能使用SET
NOT NULL。

ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer 为随后的
ANALYZE 操作设置针对每个字段的统计收集目标。目标的范围可以在0 到10000
之内设置。设置为-1 时表示重新恢复到使用系统缺省的统计目标。

{ADD | DELETE} STATISTICS ((column_1_name, column_2_name [, ...]))用于添加
和删除多列统计信息声明(不实际进行多列统计信息收集)
,以便在后续进行全表
或全库analyze 时进行多列统计信息收集。
每组多列统计信息最多支持32 列。
不支
持添加/删除多列统计信息声明的表:系统表、外表。

ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] )设置/重置
属性选项。目前,属性选项只定义了n_distinct 和n_distinct_inherited。n_distinct
影响表本身的统计值,而n_distinct_inherited 影响表及其继承子表的统计。目前,

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
760
只支持SET/RESET n_distinct 参数,禁止SET/RESET n_distinct_inherited 参数。

ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL |
EXTENDED | MAIN }为一个字段设置存储模式。这个设置控制这个字段是内联保
存还是保存在一个附属的表里,以及数据是否要压缩。
仅支持对行存表的设置;对
列存表没有意义,执行时报错。SET STORAGE 本身并不改变表上的任何东西,只
是设置将来的表操作时,建议使用的策略。
其中列约束column_constraint 为:
[ CONSTRAINT constraint_name ]
{ NOT NULL |
NULL |
CHECK ( expression ) |
DEFAULT default_expr |
GENERATED ALWAYS AS ( generation_expr ) STORED |
UNIQUE index_parameters |
PRIMARY KEY index_parameters |
ENCRYPTED WITH ( COLUMN_ENCRYPTION_KEY = column_encryption_key,
ENCRYPTION_TYPE = encryption
_type_value ) |
REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH
SIMPLE ]
[ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
其中列的压缩可选项compress_mode 为:
[ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS ]
其中根据已有唯一索引为表增加主键约束或唯一约束table_constraint_using_index 为:
[ CONSTRAINT constraint_name ]
{ UNIQUE | PRIMARY KEY } USING INDEX index_name
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
其中表约束table_constraint 为:
[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) |
UNIQUE ( column_name [, ... ] ) index_parameters |
PRIMARY KEY ( column_name [, ... ] ) index_parameters |
PARTIAL CLUSTER KEY ( column_name [, ... ] ) |

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
761
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn
[, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON
UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
其中索引参数index_parameters 为:
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]

重命名表。对名称的修改不会影响所存储的数据。
ALTER TABLE [ IF EXISTS ] table_name
RENAME TO new_table_name;

重命名表中指定的列。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
RENAME [ COLUMN ] column_name TO new_column_name;

重命名表的约束。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) }
RENAME CONSTRAINT constraint_name TO new_constraint_name;

设置表的所属模式。
ALTER TABLE [ IF EXISTS ] table_name
SET SCHEMA new_schema;

这种形式把表移动到另外一个模式。相关的索引、
约束都跟着移动。
目前序列不支
持改变schema。若该表拥有序列,需要将序列删除,重建,或者取消拥有关系,
才能将表schema 更改成功。

要修改一个表的模式,用户必须在新模式上拥有CREATE 权限。要把该表添加为
一个父表的新子表,用户必须同时又是父表的所有者。
要修改所有者,用户还必须
是新的所有角色的直接或间接成员,并且该成员必须在此表的模式上有CREATE
权限。这些限制规定了该用户不能做出了重建和删除表之外的事情。
不过,系统管
理员可以以任何方式修改任意表的所有权限。

除了RENAME 和SET SCHEMA 之外所有动作都可以捆绑在一个经过多次修改的
列表中并行使用。比如,可以在一个命令里增加几个字段或修改几个字段的类型。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
762
对于大表,
此种操作带来的效率提升更明显,
原因在于只需要对该大表做一次处理。

增加一个CHECK 或NOT NULL 约束将会扫描该表,以保证现有的行符合约束要
求。

用一个非空缺省值增加一个字段或者改变一个字段的现有类型会重写整个表。
对于
大表来说,这个操作可能会花很长时间,并且它还临时需要两倍的磁盘空间。

添加多个列
ALTER TABLE [ IF EXISTS ] table_name
ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ]
[ column_constraint [ ... ] ]} [, ...] );

更新多个列
ALTER TABLE [ IF EXISTS ] table_name
MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT
NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] );
参数说明

IF EXISTS
如果不存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表不存在。

table_name [*] | ONLY table_name | ONLY ( table_name )
table_name 是需要修改的表名。
若声明了ONLY 选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都
将会被更改。另外,可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代
表都被扫描,这是默认行为。

constraint_name
要删除的现有约束的名称。

index_name
索引名称。

storage_parameter
表的存储参数的名称。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
763
创建索引新增一个选项:

parallel_workers(int 类型)
取值范围:[0,32],0 表示关闭并发。
表示创建索引时起的bgworker 线程数量,例如2 就表示将会起2 个bgworker 线程并发
创建索引。
如果未设置,启动bgworker 线程数量与表大小相关,一般不超过4 个线程。

hasuids(bool 类型)
默认值:off
参数开启:更新表元组时,为元组分配表级唯一标识id。

new_owner
表新拥有者的名称。

new_tablespace
表所属新的表空间名称。

column_name、column_1_name、column_2_name
现存的或新字段的名称。

data_type
新字段的类型,或者现存字段的新类型。

compress_mode
表字段的压缩可选项。该子句指定该字段优先使用的压缩算法。行存表不支持压缩。

collation
字段排序规则名称。可选字段COLLATE 指定了新字段的排序规则,如果省略,排序规
则为新字段的默认类型。排序规则可以使用“select * from pg_collation;”
命令从pg_collation
系统表中查询,默认的排序规则为查询结果中以default 开始的行。

USING expression
USING 子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
764
类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个
USING 子句。
说明:ALTER TYPE 的USING 选项实际上可以声明涉及该行旧值的任何表达式,即
它可以引用除了正在被转换的字段之外其他的字段。这样,就可以用ALTER TYPE 语法做
非常普遍性的转换。因为这个灵活性,USING 表达式并没有作用于该字段的缺省值(如果
有的话)
,结果可能不是缺省表达式要求的常量表达式。这就意味着如果从旧类型到新类型
没有隐含或者赋值转换的话,即使存在USING 子句,ALTER TYPE 也可能无法把缺省值转
换成新的类型。在这种情况下,应该用DROP DEFAULT 先删除缺省,执行ALTER TYPE,
然后使用SET DEFAULT 增加一个合适的新缺省值。
类似的考虑也适用于涉及该字段的索引
和约束。

NOT NULL | NULL
设置列是否允许空值。

integer
带符号的整数常值。
当使用PERCENT 时表示按照表数据的百分比收集统计信息,
integer
的取值范围为0-100。

attribute_option
属性选项。

PLAIN | EXTERNAL | EXTENDED | MAIN
字段存储模式。

PLAIN 必需用于定长的数值(比如integer)并且是内联的、不压缩的。

MAIN 用于内联、可压缩的数据。

EXTERNAL 用于外部保存、不压缩的数据。使用EXTERNAL 将令在text 和bytea
字段上的子字符串操作更快,但付出的代价是增加了存储空间。

EXTENDED 用于外部的压缩数据,EXTENDED 是大多数支持非PLAIN 存储的数
据的缺省。

CHECK ( expression )

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
765
每次将要插入的新行或者将要被更新的行必须使表达式结果为真才能成功,
否则会抛出
一个异常并且不会修改数据库。
声明为字段约束的检查约束应该只引用该字段的数值,
而在表约束里出现的表达式可以
引用多个字段。
目前,CHECK 表达式不能包含子查询也不能引用除当前行字段之外的变量。

DEFAULT default_expr
给字段指定缺省值。
缺省表达式的数据类型必须和字段类型匹配。
缺省表达式将被用于任何未声明该字段数值的插入操作。
如果没有指定缺省值则缺省值
为NULL 。

UNIQUE index_parameters
UNIQUE ( column_name [, … ] ) index_parameters
UNIQUE 约束表示表里的一个或多个字段的组合必须在全表范围内唯一。

PRIMARY KEY index_parameters
PRIMARY KEY ( column_name [, … ] ) index_parameters
主键约束表明表中的一个或者一些字段只能包含唯一(不重复)的非NULL 值。

REFERENCES reftable [ ( refcolum ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON
UPDATE action ] (column constraint)
FOREIGN KEY ( column_name [, …
] ) REFERENCES reftable [ ( refcolumn [, …
] ) ]
[ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] (table constraint)
目前分布式版本,暂不支持通过ALTER TABLE 增加外键。
外键约束要求新表中一列或多列构成的组应该只包含、匹配被参考表中被参考字段值。
若省略refcolum,
则将使用reftable 的主键。
被参考列应该是被参考表中的唯一字段或主键。
外键约束不能被定义在临时表和永久表之间。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
766
参考字段与被参考字段之间存在三种类型匹配,分别是:

MATCH FULL:不允许一个多字段外键的字段为NULL,除非全部外键字段都是
NULL。

MATCH SIMPLE(缺省)
:允许任意外键字段为NULL。

MATCH PARTIAL:目前暂不支持。
另外,当被参考表中的数据发生改变时,某些操作也会在新表对应字段的数据上执行。
ON DELETE 子句声明当被参考表中的被参考行被删除时要执行的操作。ON UPDATE 子句
声明当被参考表中的被参考字段数据更新时要执行的操作。对于ON DELETE 子句、ON
UPDATE 子句的可能动作:

NO ACTION(缺省)
:删除或更新时,创建一个表明违反外键约束的错误。若约束
可推迟,且若仍存在任何引用行,那这个错误将会在检查约束的时候产生。

RESTRICT:删除或更新时,创建一个表明违反外键约束的错误。与NO ACTION
相同,只是动作不可推迟。

CASCADE:删除新表中任何引用了被删除行的行,或更新新表中引用行的字段值
为被参考字段的新值。

SET NULL:设置引用字段为NULL。

SET DEFAULT:设置引用字段为它们的缺省值。

DEFERRABLE
|
NOT
DEFERRABLE
|
INITIALLY
DEFERRED
|
INITIALLY
IMMEDIATE
设置该约束是否可推迟。

DEFERRABLE:可以推迟到事务结尾使用SET CONSTRAINTS 命令检查。

NOT DEFERRABLE:在每条命令之后马上检查。

INITIALLY IMMEDIATE:那么每条语句之后就立即检查它。

INITIALLY DEFERRED:只有在事务结尾才检查它。
说明:Ustore 表不支持新增DEFERRABLE 以及INITIALLY DEFERRED 约束。

PARTIAL CLUSTER KEY

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
767
局部聚簇存储,列存表导入数据时按照指定的列(单列或多列),进行局部排序。

WITH ( {storage_parameter = value} [, … ] )
为表或索引指定一个可选的存储参数。

tablespace_name
索引所在表空间的名称。

COMPRESS|NOCOMPRESS
NOCOMPRESS:如果指定关键字NOCOMPRESS 则不会修改表的现有压缩特性。
COMPRESS:
如果指定COMPRESS 关键字,
则对该表进行批量插入元组时触发该特性。
行存表不支持压缩。

new_table_name
修改后新的表名称。

new_column_name
表中指定列修改后新的列名称。

new_constraint_name
修改后表约束的新名称。

new_schema
修改后新的模式名称。

CASCADE
级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)


RESTRICT
如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。

schema_name
表所在的模式名称。
示例

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
768
请参考CREATE TABLE 的示例。
相关命令
CREATE TABLE,DROP TABLE

语法
GROUP BY CUBE( (…),(…),…)
功能
对CUBE 后面括号里的n 个字段或表达式组合做GROUP BY 操作,最后将结果合
并在一起,组合方式为n 个字段或表达式的全部子集。
详见下面的解释:
GROUP BY CUBE(A,B,C) (A、B、C 代表语法中的“(…)”)
首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),
(B),(C),然后对全表进行GROUP BY 操作,最后将所有结果合并在一起(相当于
UNION ALL 操作),如果n 个字段或表达式中的一个或多个在某一分组中不出现在
GROUP BY 后面,用NULL 代替不出现的字段或表达式。
示例
示例1:GROUP BY CUBE(color_type,f_YearMonth)
gbase> SELECT color_type,in_date,color_count FROM t3 ORDER BY color_type,in_date;
+------------+------------+-------------+
| color_type | in_date | color_count |
+------------+------------+-------------+
| black | 2010-09-11 | 18 |
| black | 2010-10-05 | 18 |
| black | 2010-10-13 | 31 |
| blue | 2010-09-21 | 23 |
| blue | 2010-09-30 | 15 |
| blue | 2010-10-11 | 62 |
| red | 2010-09-12 | 41 |
| red | 2010-10-01 | 12 |
| red | 2010-10-05 | 11 |
+------------+------------+-------------+
9 rows in set

gbase> SELECT NVL(color_type,'') as color_type_show,NVL(DECODE(color_type,NULL,f_Y
earMonth || '合计',NVL(f_YearMonth,color_type || ' 小计')),'总计') AS f_YearMonth_show,SU

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 575
M(color_count) FROM (SELECT color_type,DATE_FORMAT(in_date, '%Y-%m') as f_Year
Month,color_count FROM t3) t GROUP BY CUBE(color_type,f_YearMonth) ORDER BY col
or_type,f_YearMonth;
+-----------------+------------------+------------------+
| color_type_show | f_YearMonth_show | SUM(color_count) |
+-----------------+------------------+------------------+
| black | 2010-09 | 18 |
| black | 2010-10 | 49 |
| black | black 小计 | 67 |
| blue | 2010-09 | 38 |
| blue | 2010-10 | 62 |
| blue | blue 小计 | 100 |
| red | 2010-09 | 41 |
| red | 2010-10 | 23 |
| red | red 小计 | 64 |
| | 2010-09 合计 | 97 |
| | 2010-10 合计 | 134 |
| | 总计 | 231 |
+-----------------+------------------+------------------+
12 rows in set