返回首页

gbase数据、南大通用产品文档:GBase8s角度:

更新日期:2024年09月11日

EXECUTE FUNCTION DEGREES (6);
EXECUTE FUNCTION DEGREES ("6");
DEGREES 函数根据下列公式将弧度转换为角度:
(number of radians) * (180/pi) = (number of degrees)
在此,pi 代表圆的周长对它的直径的比率。使用超越数值 pi 作为有理数的除数
进行算术计算的结果往往包括舍入错误。
RADIANS 函数
使用 RADIANS 函数来将表示角度值的表达式或主变量转换为等同的弧度值。
返回值为类型 DECIMAL (32, 255) 的数值。
作为此函数的唯一参数的 degree_expression 必须有数值数据类型(或可转换为
数值的非数值数据类型),数据库服务器以角度的单位求值该参数,并转换为弧
度的单位:
EXECUTE FUNCTION RADIANS (100);
EXECUTE FUNCTION RADIANS ("100");
在上述两个示例中,RADIANS 参数求值为 100 度,且返回值为 1.745328251994
弧度。您可使用 RADIANS 函数表达式作为 COS、SIN 或 TAN 函数的参数,来返
回那个角各自的三角值:
COS(RADIANS (100))
SIN(RADIANS ("100"))
TAN(RADIANS (100))
RADIANS 函数根据下列公式将角度转换为弧度:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1459
(number of degrees) * (pi/180) = (number of radians)
在此,pi 代表圆的周长对它的直径的比率。使用超越数值 pi 作为有理数的除数
进行算术计算的结果往往包括舍入错误。
字符串操纵函数
字符串操纵函数对字符串执行各种操作。
在下图中标识字符串操纵函数:
字符串操纵函数

后面的部分描述每一内建的字符串操纵函数。
CONCAT 函数
CONCAT 函数接受两个表达式作为参数,并返回将由它的第二个参数返回的值的字
符串表示追加到由它的第一个参数返回的值的字符串表示之后的单个字符串。
CONCAT 函数


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1460
元素
描述
限制
语法
expr_1、
expr_2
要将它们的值的字符串表示
串联的表达式
不可返回复合的、用户定义
的或大对象类型。如果是主
变量,则它必须有足够的长
度来存储组合字符串的结
果。
表达式
CONCAT 函数的每一参数可求值为字符、数值或时间数据类型。如果某个或两
个被串联的参数为空,则该函数返回 NULL 值。
与 GBase 8s 的其他内建的字符串操纵函数不一样,不可重载 CONCAT 函数。
CONCAT 是串联(||)运算符的运算符函数。对于给定的表达式参数对,
CONCAT 返回的字符串与从同一表达式为运算对象的运算符返回的字符串相
同。要获取关于串联操作,以及对您在其中调用 CONCAT 函数的 SQL 和动态
SQL 语句的限制的附加信息,请参阅 串联运算符。
来自 CONCAT 和字符串函数的返回类型
从成功的 CONCAT 函数调用(或从串联(||)操作符,或对于确定他们的返回类
型所遵循的规则与 CONCAT 相同的其他内建的字符串操纵函数)的返回值的数
据类型依赖于参数的数据类型以及结果字符串的长度。在确定返回类型时,两个
参数的顺序的意义不大。
对于来自串联多个数据类型指定的值的串联操作的返回类型, GBase 8s 应用下
列规则:

如果其中一个类型为“国家语言支持”(也就是 NCHAR 和
NVARCHAR):
o
如果结果的长度小于 255 字节,则返回类型为 NVARCHAR
o
否则,返回类型为 NCHAR。

如果其中一个参数为 VARCHAR 或数值类型,则
o
如果结果的长度小于 255 字节,则返回类型为 VARCHAR
o
否则,返回类型为 LVARCHAR。

然而,在某些在本地执行远程例程的跨服务器操作中,可发生针对这些规
则的例外,且在将串联表达式的返回值发送到远程数据库服务器之前,在

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1461
本地对它求值。对于不支持在分布式事务中的 LVARCHAR 数据类型的
远程服务器,如果发送 LVARCHAR 类型返回错误,则作为 CHAR 数据
类型发送串联的结果。在此情境下,早于 Version 11.10 的 GBase 8s 数
据库服务器实例需要 CHAR 返回值。
在下列表格中,各行罗列 CONCAT 函数的第一个参数的有效的数据类型,各列
罗列第二个参数的类型。每一行与列交叉处的单元展示可能的一个或多个返回类
型。标明其他的行和列表示求值为非字符类型的参数,诸如数值或像 DECIMAL
或 DATE 一样的时间数据类型。
表 1. 来自两个参数上的操作的返回类型(在 Version 11.50.xC2 或更新版本中)

NCHAR
NVARCHAR CHAR
VARCHAR
LVARCHAR 其他
NCHAR
nchar
nvarchar
或 nchar
nchar
nvarchar
或 nchar
nvarchar
或 nchar
nvarchar
或 nchar
NVARCHAR nvarchar
或 nchar
nvarchar
或 nchar
nvarchar
或 nchar
nvarchar
或 nchar
nvarchar
或 nchar
nvarchar
或 nchar
CHAR
nchar
nvarchar
或 nchar
char
varchar

lvarchar
lvarchar varchar

lvarchar
VARCHAR nvarchar
或 nchar
nvarchar
或 nchar
varchar

lvarchar
varchar

lvarchar
lvarchar varchar

lvarchar
LVARCHAR nvarchar
或 nchar
nvarchar
或 nchar
lvarchar lvarchar lvarchar lvarchar
其他
nvarchar
或 nchar
nvarchar
或 nchar
varchar

lvarchar
varchar

lvarchar
lvarchar varchar

lvarchar
对于 CONCAT 之外的其他字符串操纵函数,DATE、DATETIME 或 MONEY
数据类型的参数往往返回 NVARCHAR 或 NCHAR 值,这依赖于结果字符串的
长度。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1462
此表格是对称的,因为参数的顺序对返回数据类型没有影响。对于内建的字符串
操纵函数或运算符,用户定义的数据类型、大对象类型、复合的类型和其他扩展
的数据类型不是有效的参数。
此表格还描述使用串联(||)运算符的表达式的返回数据类型。
对于 CHAR、NCHAR 和 LVARCHAR 数据类型,此处没有展示在其中的参数
长度的总和超出大约 32 KB 限度的串联操作的结果。这会返回错误 -881,而不
是串联的数据值。由于最大的 LVARCHAR 大小为 32,739 字节,且 CHAR 和
NCHAR 的限度都是 32,767 字节,因此错误 -881 总是与其限度为 255 字节的
VARCHAR 和 NVARCHAR 对象相关联,但自动的返回类型提升可降低此错误
的发生几率。
对于返回类型提升,下列字符串操纵函数支持与 CONCAT 相同的规则:

LPAD

RPAD

REPLACE

SUBSTR

SUBSTRING

TRIM

LTRIM

RTRIM
下列表格总结 GBase 8s 如何基于参数类型,来确定来自这些字符串操纵函数的
返回类型:
表 2. 支持返回类型提升的字符串操纵函数
函数
如何确定函数的返回类型
CONCAT、||
返回类型基于两个参数。请参考 表 1。
SUBSTR、SUBSTRING
返回类型与 source string 类型相同。如果 source
string 为主变量,则依赖于结果的长度,返回类型为
NVARCHAR 或 NCHAR。
TRIM、LTRIM、RTRIM 返回类型依赖于源类型和返回的长度:

NVARCHAR 返回 NVARCHAR

VARCHAR 返回 VARCHAR

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1463

CHAR 返回 VARCHAR(如果 length <= 255
字节的话)

CHAR 返回 LVARCHAR(如果 length > 255
字节的话)

NCHAR 返回 NVARCHAR(如果 length <=
255 字节的话)

NCHAR 返回 LVARCHAR(如果 length > 255
字节的话)

LVARCHAR 返回 LVARCHAR
LPAD、RPAD
返回类型基于 source_string 和 pad_string 参数。
如果未指定 pad_string,则返回类型基于
source_string 的数据类型。
REPLACE
返回类型基于 source_string 和 old_string 参数
(以及基于 new_string 参数,如果指定了的话)。如
果任何参数为主变量,则返回类型为 NCHAR。
ENCRYPT_AES、
ENCRYPT_TDES、
DECRYPT_BINARY、
DECRYPT_CHAR
对于不是 BLOB 或 CLOB 变量的参数,返回类型基于
data 和 encrypted_data 参数的数据类型。请参考 表
1。
在 NLSCASE INSENSITIVE 数据库中的数据类型提升
在有 NLSCASE INSENSITIVE 属性的数据库中,数据库服务器丢弃 NCHAR 和
NVARCHAR 值的大写字母。通过执行隐式的强制转型来在其中避免函数或运算
符溢出错误的表达式,可产生与区分大小写的数据库会返回的结果不同的结果,
如果该表达式求值为 NCHAR 或 NVARCHAR 数据类型的话。
当数据库服务器在其上支持数据类型提升的字符串函数或字符串运算符返回一
值,对于该表达式的缺省的 VARCHAR 或 NVARCHAR 数据类型会产生溢出错误时,
数据库服务器在返回值上执行隐式的强制转型,如同主题 来自 CONCAT 和字符
串函数的返回类型 的第一张表格表明的那样:

如果没有参数或运算对象是 NCHAR 或 NVARCHAR 数据类型,则表
达式求值为 CHAR、LVARCHAR 或 VARCHAR 数据类型。

如果任何参数或运算对象是 NCHAR 或 NVARCHAR 数据类型,则表
达式求值为 NCHAR 或 NVARCHAR 数据类型。
在有 NLSCASE INSENSITIVE 属性的数据库中,对 CHAR、LVARCHAR 或
VARCHAR 数据类型的操作是区分大小写的,但对 NCHAR 或 NVARCHAR 数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1464
据类型的操作不区分大小写。数据类型提升还从包括 CHAR、LVARCHAR 或
VARCHAR 分量的表达式的求值产生不区分大小写的结果(而不是区分大小
写),如果同一表达式还包括 NCHAR 或 NVARCHAR 字符串的话。
下列示例说明在 NLSCASE INSENSITIVE 数据库中的此行为,其中的表 t1 有五个
字符列,对应五种内建的字符数据类型。该表存储三行,其中的每一列存储 3 个
字母字符串的同一字母大小写变量:
CREATE DATABASE db NLSCASE INSENSITIVE;
CREATE TABLE t1 (
c1 NCHAR(20),
c2 NVARCHAR(20),
c3 CHAR((20),
c4 VARCHAR(20),
c5 LVARCHAR(20)) ;
INSERT INTO t1 values ('gbase', 'gbase', 'gbase', 'gbase', 'gbase');
INSERT INTO t1 values ('Gbase', 'Gbase', 'Gbase', 'Gbase', 'Gbase');
INSERT INTO t1 values ('GBASE', 'GBASE', 'GBASE', 'GBASE', 'GBASE');
下列查询使用其字母均为小写的文字字符串的相等谓词,从 NCHAR 列检索值:
SELECT c1 FROM t1 WHERE c1 = 'gbase';
由于在此数据库中 NCHAR 值不区分大小写,因此该查询从每一行返回列 c1
值:
c1
gbase
Gbase
GBASE
下列对同一表的查询从 WHERE 子句将其强制转型为 NCHAR 值的 CHAR 列
c3,返回相同的不区分大小写的结果:
SELECT c1 FROM t1 WHERE c3 = 'gbase'::NCHAR(10);
在强制转型之后,c3 值不区分大小写,因此,c3 中的每行都与字符串 'ibm' 相
匹配,且对于 c1 中的每行,WHERE 条件都为真:
c1
gbase
Gbase
GBASE

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1465
如同在前面的示例中那样,在相同的序列中出现相同的字母的字符串之中,由于
不区分大小写的操作丢弃字母大小写的差异,因此在有 NLSCASE INSENSITIVE
属性的数据库中,请留意避免将不区分大小写的规则应用到您期望区分大小写的
操作的数据类型提升上下文。
另请参阅 在 NLSCASE INSENSITIVE 数据库中重复的行 部分。
在分布式事务中的返回字符串类型
在访问同一 GBase 8s 实例的不同数据库中的表的跨数据库分布式查询中,通过
来自 CONCAT 函数的返回类型部分描述的 CONCAT(以及通过遵循相同的返
回类型提升的其他内建的字符串操纵函数)返回相同的类型。
在跨服务器的分布式查询中也返回相同的类型。
对于的 GBase 8s 的所有版本,如果返回的字符串的长度超出 23 KB,则发出错
误 -881。
ASCII 函数
ASCII 函数基于在 ASCII 字符集中它的代码点,返回字符串中第一个字符的十进
制表示。
ASCII 函数

元素
描述
限制
语法
char_expr
求值为字符数据类型的表
达式
必须为类型 CHAR、
LVARCHAR、NCHAR、
NVARCHAR 或 VARCHAR
标识

ASCII 函数采用任何字符数据类型的单个参数。它基于参数的第一个字符返回一
个整数值,对应于在 ASCII 字符集内那个字符的代码点的十进制表示。
如果参数为 NULL,或如果参数为空串,则 ASCII 函数返回 NULL 值。
下列查询返回大写 H 的 ASCII 值:
SELECT ASCII("HELLO") FROM systables WHERE tabid = 1;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1466
下列表格展示此 SELECT 语句的输出。
(constant)
72
下列查询返回小写 h 的 ASCII 值:
SELECT ASCII("hello") FROM systables WHERE tabid = 1;
下列表格展示此 SELECT 语句的输出。
(constant)
104
下列查询从空字符串参数返回 ASCII 输出:
SELECT ASCII("") FROM systables WHERE tabid = 1;
下列表格展示此 SELECT 语句的 NULL 输出。
(constant)

下列查询返回从 NULL 参数的 ASCII 输出:
SELECT ASCII(NULL) FROM systables WHERE tabid = 1;
下列表格展示此 SELECT 语句的 NULL 输出。
(constant)

ASCII 函数将此参数解释为 NULL 表达式,而不是为以大写 N 开头的值。
要获取 ASCII 字符集中代码点的数值值的表格,请参阅 U.S. English 数据的排序
顺序。
TRIM 函数
TRIM 函数从字符串移除指定的开头或末尾的填充字符。(另请参阅 LTRIM 和
RTRIM 函数的描述,这两个函数提供类似的功能,但支持不同的语法。)
TRIM 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1467

元素
描述
限制
语法
pad_char
求值为单个字符或 NULL 的表
达式。缺省值为空格(=
ASCII 32)。
必须为字符表
达式
表达

source_expression
字符表达式,包括字符列名,
或对另一 TRIM 函数的调用
不可为
DISTINCT 数
据类型
表达

TRIM 函数返回一个与它的 source_expression 参数相同的字符串,除了删除由
LEADING、TRAILING 或 BOTH 关键字指定的开头或末尾填充字符之外。如果
未指定修正限定符(LEADING、TRAILING 或 BOTH),则缺省值为 BOTH。
如果未指定 pad_char,则缺省值为单个空格(ASCII 32 字符),并从返回的值删
除由限定的关键字指定的开头的或末尾的空格。
如果 pad_char 或 source_expression 求值为 NULL,则 TRIM 函数的结果为
NULL。
返回的值的数据类型依赖于 source_expression 参数:

如果参数长于 255 字节,则返回的值为 LVARCHAR 类型。

如果参数有 255 字节或更少,则返回的值的数据类型依赖于参数的数据
类型:
o
如果参数是 CHAR 或 VARCHAR 类型,则返回 VARCHAR
值。
o
如果参数是 NCHAR 或 NVARCHAR 类型,则返回
NVARCHAR 值。
o
如果参数是 LVARCHAR 类型,则返回 LVARCHAR 值。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1468
对于 VARCHAR 或 NVARCHAR source_expression 参数,返回的值的长度为
255 字节或更少,而对于 CHAR、NCHAR 或 LVARCHAR 参数,长度不超过
32,739 字节。
下列示例展示 TRIM 函数的一些一般使用:
SELECT TRIM (c1) FROM tab;
SELECT TRIM (TRAILING '#' FROM c1) FROM tab;
SELECT TRIM (LEADING FROM c1) FROM tab;
UPDATE c1='xyz' FROM tab WHERE LENGTH(TRIM(c1))=5;
SELECT c1, TRIM(LEADING '#' FROM TRIM(TRAILING '%' FROM
'###abc%%%')) FROM tab;
在动态 SQL 中,当您随同在 Projection 子句中调用 TRIM 函数的 SELECT 语
句来使用 DESCRIBE 语句时,对于在 GBase 8s ESQL/C 源文件的 sqltypes.h 头
文件中定义的 SQL 数据类型常量,DESCRIBE 返回的修正的列的数据类型依赖
于 source_expression 的数据类型。要获取关于 GBase 8s ESQL/C 中 TRIM 函
数在 GLS 方面的更多信息,请参阅 GBase 8s GLS 用户指南。
固定的字符列
可在定长字符列上指定 TRIM 函数。如果字符串的长度未完全地填满,则以空格
填充未使用的字符。 图 1 展示对于列条目 '##A2T##' 的此概念,在此,定义该
列为 CHAR(10)。
图: 在定长字符列的列条目


如果您想要从该列修整掉井号(#)pad_char,则需要考虑填充的空格以及实际的
字符。
例如,如果您指定关键字 BOTH,则修整操作的结果为 A2T##,因为 TRIM 函数与
跟在字符串之后的修整的空格不匹配。在此情况下,仅修整在其他字符之前的那
些井号(#)。图 2 跟着的 SELECT 语句显示结果。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1469
SELECT TRIM(LEADING '#' FROM col1) FROM taba;
图: TRIM 操作的结果


此 SELECT 语句移除所有出现的井号(#):
SELECT TRIM(BOTH '#' FROM TRIM(TRAILING ' ' FROM col1)) FROM taba;
LTRIM 函数
LTRIM 函数从字符串移除指定的开头填充字符。
LTRIM 函数

元素
描述
限制
语法
pad_string
指定一个或多个要从
source_string 删除
的字符的表达式
必须为字符表达式
表达

source_string
指定要从其删除
pad_string 中的字
符的字符串的表达式
不删除不在 pad_string 中
任何字符右边的填充字符
表达

LTRIM 函数的第一个参数必须为要从其删除开头填充字符的字符表达式。可选
的第二个参数是求值为填充字符的字符串的字符表达式。如果未提供第二个参
数,则仅将空字符作为填充字符。
LTRIM 函数的返回数据类型是基于它的 source_string 参数的,使用 来自
CONCAT 函数的返回类型 部分描述的返回类型提升规则。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1470
返回的值包含 source_string 的子字符串,但已移除了第一个非填充字符左边的任
何开头填充字符。如果使用主变量,则返回 LVARCHAR 数据类型。
LTRIM 函数从左边扫描 source_string 的副本,删除出现在 pad_string 中的任
何开头字符。如果未指定 pad_string 参数,则仅从返回的值删除开头空格。当遇
到第一个非填充字符时,该函数返回它的结果字符串并终止。
在下列示例中,pad_string 为 'Hello':
SELECT LTRIM('Hellohello world!', 'Hello') FROM mytab;
下列表格展示此 SELECT 语句的输出。
(constant)
hello world!
在此,删除了 source_string 的前五个字符,因为它们与 pad_string 中的字符
相匹配,但在该函数遇到了小写字母 h 字符之后终止,其保留了它右边的末尾
'ello' 填充字符。
RTRIM 函数
RTRIM 函数从字符串移除指定的末尾填充字符。
RTRIM 函数

元素
描述
限制
语法
pad_string
指定要从
source_string 删除
的一个或多个字符的
表达式
必须为字符表达式
表达

source_string
指定从其删除
pad_string 中的字
符的字符串的表达式
不删除不在 pad_string 中
的任何字符左边的填充字符
表达


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1471
RTRIM 函数的第一个参数必须为从其删除末尾填充字符的字符表达式。可选的
第二个参数是求值为填充字符的字符串的字符串表达式。如果未提供第二个参
数,则仅将空字符作为填充字符。
LTRIM 函数的返回数据类型是基于它的 source_string 参数的,使用 来自
CONCAT 函数的返回类型 部分描述的返回类型提升规则。
返回的值包含 source_string 的子字符串,但已从其移除了第一个非填充字符右边
的任何末尾填充字符。如果使用主变量,则返回 LVARCHAR 数据类型。
RTRIM 函数从右边扫描 source_string 的副本,删除出现在 pad_string 中的任
何末尾字符。如果未指定 pad_string 参数,则仅从返回的值删除末尾空格。当遇
到第一个非填充字符时,该函数返回它的结果字符串并终止。
在下列示例中,pad_string 为 'theend!*#?':
SELECT RTRIM('good night... *!#?theend ', ' theend!*#?') AS closing FROM
mytab;
下列表格展示此 SELECT 语句的输出。
(constant)
good night...
在此,删除了 source_string 的最后十五个字符,因为它们与 pad_string 中的
字符相匹配,但该函数在遇到了句号(.)字符之后终止了,保留了左边的开头的
'thn' 填充字符。
SPACE 函数
SPACE 函数创建指定的空格数量的字符串。返回的字符串值的最大长度可为
32,739 空字符。
该函数有此语法:
SPACE 函数


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1472
元素
描述
限制
语法
expression
求值为非负整数 < 256
的表达式
必须为表达式、常量、列或
内建的整数类型的主变量,
或可转化为整数的表达式
表达式
SPACE 函数的参数必须为内建的数据类型。
SPACE 函数返回指定数目的空(ASCII 32)字符的 LVARCHAR 字符串。
如果参数求值为 NULL 值,或为小于 1 的数值,则此函数返回 NULL 值,而
不是空串。
在下列示例中,SPACE 函数返回单个字符的空字符串:
SELECT SPACE(1) FROM tabula_rasa;
下列表格展示来自此 SELECT 语句的输出,其为单个空字符:
(constant)

REVERSE 函数
REVERSE 函数接受字符表达式作为它的参数,并返回同样长度的字符串,但颠
倒每个逻辑字符的顺序位置。
这是 REVERSE 函数的语法:
REVERSE 函数

元素
描述
限制
语法
source_string
求值为字符串的表达

必须为表达式、常量、列或
可转换为字符类型的类型的
主变量
表达


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1473
REVERSE 函数的参数不可有用户定义的数据类型。内建的 CHAR、
LVARCHAR、NCHAR、NVARCHAR 和 VARCHAR 类型是有效的。
REVERSE 函数返回与它的 source_string 参数相同的数据类型。
如果您指定作为参数的表达式求值为 NULL,则返回值为 NULL。
对于求值为 N 字符的字符串的参数,在 source_string 中每一字符的顺序位置 p
在返回的字符串中成为 (N + 1 - p)。这颠倒了 source_string 中字符序列的原
始顺序,因此,返回值以 source_string 中的最后一个字符开头,并以
source_string 的第一个字符结尾。
例如,函数表达式 REVERSE('Mood') 从加引号的字符串参数返回字符串
dooM。在单字节和多字节代码集中,仅颠倒顺序的位置,而不颠倒字母本身。在
上述的函数表达式中,'d' 不成为 'b',且多字节代码集(例如,utf8 或 GB2312-
80)中的每一逻辑字符作为单一的逻辑单位换位。
如果参数求值为单个字符或空的 source_string,则返回值与 source_string 相同,
如同 REVERSE 函数未起作用一样。对于包括多个字符的字符串,仅当
source_string 是回文时,此等式才为真。对于 MOD(N,2) = 1 的字符串,顺序
位置为 (N+1)/2 的字符在 source_string 中和在返回的字符串中都处于相同的
中间位置。
在下列示例中,REVERSE 函数颠倒一个引号括起的字符串参数:
SELECT REVERSE('Able was I ere I saw Elba.') FROM Mirror_Table;
下列表格展示此 SELECT 语句的输出。
(constant)
.ablE was I ere I saw elbA
REPLACE 函数
REPLACE 函数以不同的字符替换源字符串内指定的字符。
REPLACE 函数


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1474
元素
描述
限制
语法
new_string
替换字符串中
old_string 的单个
或多个字符
必须为表达式、常量、列或
可转换为字符数据类型的数
据类型的主变量
表达

old_string
要被 new_string 替
换的 source_string
中的一个或多个字符
必须为表达式、常量、列或
可转换为字符数据类型的数
据类型的主变量
表达

source_string
REPLACE 函数的字符
串参数
必须为表达式、常量、列或
可转换为字符数据类型的数
据类型的主变量
表达

REPLACE 函数的任何参数都必须为内建的数据类型。
REPLACE 函数返回 source_string 的副本,以 new_string 替换其中的每个
old_string。如果您省略 new_string 选项,则从返回字符串中略去每个
old_string。
返回数据类型是它的 source_string 参数。如果主变量是源,则返回值为
NVARCHAR 或 NCHAR,这要根据返回的字符串的长度来定,使用 来自
CONCAT 函数的返回类型 部分描述的返回类型提升规则。
在下列示例中,REPLACE 函数以 t 替换源字符串中的每个 xz:
SELECT REPLACE('Mighxzy xzime', 'xz', 't') FROM mytable;
下列表格展示此 SELECT 语句的输出。
(constant)
Mighty time
LPAD 函数
LPAD 函数返回 source_string 的一个副本,左填充达到由 length 指定的总字
节数。
LPAD 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1475

元素
描述
限制
语法
length
指定在返回的字
符串中总的字节
数的整数值
必须为表达式、常量、列或可转
换为整数数据类型的数据类型的
主变量
精确
数值
pad_string
指定一个或多个
填充字符的字符

必须为表达式、常量、列或可转
换为字符数据类型的数据类型的
主变量
表达

source_string
作为 LPAD 函数
的输入的字符串
必须为表达式、常量、列或可转
换为字符数据类型的数据类型的
主变量
表达

LPAD 函数的任何参数都必须为内建的数据类型。
pad_string 参数指定要被用于填充源字符串的一个或多个字符。填充字符的序列
出现的次数与使得返回字符串达到 length 指定的存储长度的必要次数相同。
如果 pad_string 中的填充字符的序列太长,以至于不适应 length,则截断它。如
果您未指定 pad_string,则缺省值为单个空(ASCII 32)字符。
返回数据类型是基于这三个参数的,使用 来自 CONCAT 函数的返回类型 部分
描述的返回类型提升规则。
在下列示例中,用户指定要将源字符串左填充达到总长度 16 字节。用户还指定
填充字符是由连字符和下划线(-_)组成的序列。
SELECT LPAD('Here we are', 16, '-_') FROM mytable;
下列表格展示此 SELECT 的输出。
(constant)
-_-_-Here we are
RPAD 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1476
RPAD 函数返回 source_string 的一个副本,右填充达到 length 参数指定的总
字节数。
RPAD 函数

元素
描述
限制
语法
length
返回值中的总字
节数
必须为表达式、常量、列或
返回整数的主变量
精确数值
pad_string
指定一个或多个
填充字符的字符

必须为表达式、常量、列或
可转换为字符数据类型的数
据类型的主变量
表达式
source_string
作为 RPAD 函数
的输入的字符串
同 pad_string
表达式
RPAD 函数的任何参数都必须为内建的数据类型。
pad_string 参数指定要用来填充源字符串的一个或多个填充字符。
填充字符的序列出现的次数与使得返回字符串达到 length 指定的长度所必要的次
数相同。如果 pad_string 中的填充字符的序列太长,以至于不适应 length,则截
断它。如果您省略 pad_string 参数,则缺省的值为单个空格(ASCII 32)字符。
返回数据类型是基于 source_string 和 pad_string 参数的,如果都指定了的话。
如果主变量是源,则返回值为 NVARCHAR 或 NCHAR,根据返回的字符串的长
度来确定,使用 来自 CONCAT 函数的返回类型 部分描述的返回类型提升规
则。
即使 RPAD 函数已将空字符追加到数据值之后,DB-Access 的 UNLOAD 特性
也截断 CHAR 或 NCHAR 列中的末尾空格。您必须显式地将 CHAR 或
NCHAR 值强制转型为 VARCHAR、LVARCHAR 或 NVARCHAR 数据类型,
如果您需要 UNLOAD 保留 RPAD 返回的值中的末尾空字符或不可打印的字符
的话。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1477
在下列示例中,用户指定将源字符串右填充到总长度 18 字符。用户还指定要使
用的填充字符是由问号和叹号(?!)组成的序列
SELECT RPAD('Where are you', 18, '?!') FROM mytable;
下列表格展示此 SELECT 语句的输出。
(constant)
Where are you?!?!?
CHR 函数
此函数接受无符号整数参数,并返回单个逻辑字符。
CHR 函数有此语法:
CHR 函数

元素
描述
限制
语法
expression 求值为小于 256 的
非负的整数的表达式
必须为取值范围从 0 至 255
(含 0 和 255)的整数
表达式
返回值的数据类型为 VARCHAR(1)。
参数可为 SMALLINT、INTEGER、SERIAL、INT8、SERIAL8、BIGINT 或
BIGSERIAL。参数必须求值为整数,取值范围从 0 至 255。
如果参数为取值范围从 0 至 127 的整数,则返回值为对应的单字节 ASCII 代
码点。要获取对应于 ASCII 代码点从 0 至 127 的字符的列表,请参阅 U.S.
English 数据的排序顺序。
如果参数是取值范围从 128 至 255 的整数,则返回值为缺省的代码集中对应的
2 字节代码点。

在 UNIX™ 平台上,缺省的代码集为 ISO8859-1。

在 Windows™ 平台上,缺省的代码集为 Microsoft™ 1252。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1478
大小写转换函数
大小写转换函数执行对字母字符的大小写转换。在缺省的语言环境中,这些函数
仅可修改范围为 A - Z 以及 a - z 内的 ASCII 字符,这使得您能够在您的查
询中执行区分大小写的搜索并能够指定输出的格式。
大小写转换函数是 UPPER、LOWER 和 INITCAP。下图展示这些大小写转换函数的
语法。
大小写转换函数

元素
描述
限制
语法
expression
返回字符串
的表达式
必须为内建的字符类型。如果是主变
量,则它的长度必须足够存储转换的字
符串。
表达式
expression 必须返回字符数据类型。当指定列表达式时,由数据库服务器返回的
列数据类型为 expression 的数据类型。例如,如果输入类型为 CHAR,则输出类
型也为 CHAR。
这些函数的参数必须为内建的数据类型。
在所有语言环境中,以大小写转换函数从列的描述返回的字节长度是源字符串的
输入字节长度。如果您使用带有多字节 expression 参数的大小写转换函数,则转
换可能增加或减少该字符串的长度。如果结果字符串的字节长度超过 expression
的字节长度,则数据库服务器截断结果字符串来适应 expression 的字节长度。
仅转换在语言环境文件中指定为 ALPHA 类的字符,且仅当语言环境识别大小写
的结构时才会发生。
如果 expression 求值为 NULL,则大小写转换函数的结果也是 NULL。
在下列实例中,数据库服务器将大小写转换函数处理为 SPL 例程:

如果它没有参数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1479

如果它有一个参数,且那个参数是命名的参数

如果它有多个参数

如果它出现在 Projection 列表中,以主变量作为参数
如果未遇到前面的列表中的情况,则数据库服务器将大小写转换函数处理为系统
函数。
下列示例在相同的查询中使用所有大小写转换函数来为同一值指定多种输出格
式:
Input value:
SAN Jose

Query:
SELECT City, LOWER(City), LOWER("City"),
UPPER (City), INITCAP(City)
FROM Weather;

Query output:
SAN Jose san jose city SAN JOSE San Jose
UPPER 函数
UPPER 函数接受一个表达式参数,并返回其中的表达式中的每个小写字母字符
都被对应的大写字母字符替换的字符串。
下列示例使用 UPPER 函数来对带有 Curran 姓氏的所有员工执行 lname 列上的
区分大小写搜索:
SELECT title, INITCAP(fname), INITCAP(lname) FROM employees
WHERE UPPER (lname) = "CURRAN"
由于在 projection 列表中指定 INITCAP 函数,因此数据库服务器返回混合大小
写格式的结果。例如,一个相匹配的行的输出可能为:accountant James
Curran.
LOWER 函数
LOWER 函数接受一个表达式参数,并返回其中表达式中的每个大写字母字符都
被对应的小写字母字符替换的字符串。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1480
下列示例展示如何使用 LOWER 函数来在 City 列上执行区分大小写的搜索。此语
句指导数据库服务器以混合大小写格式 San Jose 替换词语 san jose 的任何实
例(即,任何变化形式)。
UPDATE Weather SET City = "San Jose"
WHERE LOWER (City) = "san jose";
INITCAP 函数
INITCAP 函数返回表达式的一个副本,其中表达式中每个词都以大写字母开头。
使用这个函数,词语在任何字符而不是字母之后开始。因此,除了空格,诸如逗
号、句号、冒号等等这样的符号引出新的词语。
要获取 INITCAP 函数的示例,请参阅 UPPER 函数。
NLSCASE INSENSITIVE 数据库中的大小写转换函数
指定了 UPPER 和 LOWER 大小写转换函数来支持在区分大小写的数据库中的
区分大小写查询。在有 NLSCASE INSENSITIVE 属性的数据库中不经常需要他
们,因为无需调用这些函数,NCHAR 和 NVARCHAR 数据类型就支持区分大小
写的查询。您可在 NLSCASE INSENSITIVE 数据库中调用大小写转换函数,它
们对 CHAR、LVARCHAR 和 VARCHAR 数据类型的影响与在区分大小写的数
据库中相同。
在以 NLSCASE INSENSITIVE 选项创建的数据库中,数据库服务器不理会
NCHAR 和 NVARCHAR 值的字母大小写。调用大小写转换函数的表达式可返回
的结果可与区分大小写的数据库会返回的不同,如果该表达式引用 NCHAR 或
NVARCHAR 对象,或如果数据库服务器以显式的或隐式的强制转型将该表达式
求值为 NCHAR 或 NVARCHAR 数据类型的话。
当在带有 NLSCASE INSENSITIVE 属性的数据库中使用 UPPER、LOWER 或 INITCAP
函数对字符串表达式求值时,数据库服务器调用该函数,并对它的返回值应用数
据类型提升规则,在主题 来自 CONCAT 和字符串函数的返回类型 中总结该规
则。

如果该表达式求值为 CHAR、LVARCHAR 或 VARCHAR 数据类型,
则数据库服务器可使用区分大小写的操作中的结果,如果那些操作不涉及
NCHAR 或 NVARCHAR 对象的话。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1481

在执行了 UPPER、LOWER 或 INITCAP 函数之后,如果该表达式求
值为 NCHAR 或 NVARCHAR 值,则在使用来自该表达式的此返回值
的后续操作中,不理会在此结果中的字母的大小写。
下列示例说明在 NLSCASE INSENSITIVE 数据库中的此行为,其中表 t1 有这五个
内建的字符数据类型的字符列。该表存储三行,其中每一列存储 3 个字母字符串
的相同大小写的形式:
CREATE DATABASE db NLSCASE INSENSITIVE;
CREATE TABLE t1 (
c1 NCHAR(20),
c2 NVARCHAR(20),
c4 VARCHAR(20),
c5 LVARCHAR(20)) ;
INSERT INTO t1 values ('gbase', 'gbase', 'gbase', 'gbase', 'gbase');
INSERT INTO t1 values ('Gbase', 'Gbase', 'Gbase', 'Gbase', 'Gbase');
INSERT INTO t1 values ('GBASE', 'GBASE', 'GBASE', 'GBASE', 'GBASE');
在下列示例中,数据库服务器将 UPPER 函数应用到 NCHAR 列 c1,然后对于
'GBASE' 字符串常量相匹配的列中返回的所有值应用区分大小写的规则。
SELECT c1 FROM t1 WHERE UPPER(c1) = ‘GBASE’;
由于在此数据库中 NCHAR 值时不区分大小写的,因此该查询从表中的每行返回列
c1 值,由于在每一行中字母的序列与字符串常量相匹配,使用忽略该列值的字母
大小写的不区分大小写的规则:
c1
gbase
Gbase
GBASE
在相同的表上,通过对同一查询的下列修改,也会返回相同的结果集
(即’gbase’、'Gbase' 和 ' GBASE '):

如果 projection 子句指定了任何其他列,而不是 c1,因为每行存储相同
的值,且对于此数据库中字符串 'IBM' 的所有大小写变化形式,
UPPER 返回的 NCHAR 值使得 WHERE 子句为真。

如果 WHERE 子句中的 'IBM' 字符串是相同的字符序列的任何其他字
母大小写变化形式,因为在此数据库中区分大小写的规则不处理 NCHAR
数据类型。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1482

如果大小写转换函数的参数是 NVARCHAR 列 c2,而不是 NCHAR 列
c1,因为在此数据库中 NCHAR 或 NVARCHAR 都是不区分大小写的数
据类型。

如果将大小写转换函数 LOWER 或 INITCAP,而不是 UPPER,应用
于列 c1,因为在此数据库中,那个 NCHAR 列的每个(大小写变化形
式)值都与 'IBM' 相匹配。

如果未调用大小写转换函数,但 WHERE 条件反而指定了 c1 =
'IBM',因为在此 NLSCASE INSENSITIVE 数据库中,大小写转换函数
作为查询过滤器对 NCHAR 或 NVARCHAR 参数不起作用。
子字符串函数
内建的 SQL 子字符串函数从字符串参数返回子字符串,或返回子字符串上操作的
位置信息。
子字符串函数

下面的部分描述这些子字符串函数的语法和用法。
CHARINDEX 函数
CHARINDEX 函数搜索字符串,找到目标子字符串的第一次出现,搜索从源字符
串内指定的或缺省的字符位置开始。
CHARINDEX 函数有此语法:
CHARINDEX 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1483

元素
描述
限制
语法
source_
string
求值为字符串的表达式 必须为一表达式、常量、列或
内建的字符类型或可转换为字
符类型的类型的主变量
表达式
start_
position
要在 source 中开始搜
索的顺序位置,此处的
1 为第一个逻辑字符
必须为一表达式、常量、列或
内建的字符类型或可转换为字
符类型的类型的主变量
表达式
substring
求值为字符串的表达式 必须为一表达式、常量、列或
内建的字符类型或可转换为字
符类型的类型的主变量
表达式
CHARINDEX 的参数不可为用户定义的数据类型。
如果 source 或 substring 为 NULL,则此函数返回 NULL。
如果可选的 start_position 值小于 1,或如果您省略此参数,则在 source 中的第
一个逻辑字符处开始搜索 substring,如同您已指定了 1 作为起始位置一样。
如果找不到与 substring 相匹配的表达式,则 CHARINDEX 返回零(0)。否
则,它返回在 substring 第一次出现的第一个逻辑字符的顺序位置。
如果您指定大于 1 的 start_position,则忽略在 start_position 之前开始的
任何 substring,该函数返回下列值之一:

或者是在第一个相匹配的子字符串中第一个逻辑字符的位置,其顺序位置
等于或大于 start_position,

或者是零(0),如果开始于 start_position 或跟在 start_position 之后的
source 中没有 substring 出现,或如果 start_position 大于 source 中逻
辑字符的数目。
在支持多字节字符集的语言环境中,返回值为 source 中逻辑字符之中的顺序值。
在单字节语言环境中,比如缺省的语言环境,返回值等同于字节位置,在此,第
一个字节位于位置 1。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1484
在以 NLSCASE INSENSITIVE 选项创建的数据库中,如果 source 或 substring
是 NCHAR 或 NVARCHAR 数据类型,则数据库服务器在确定 source 的给定
的子字符串是否与目标 substring 相匹配时,忽略字母大小写的变化形式。
下列函数表达式返回 9:
CHARINDEX('com','www.ibm.com')
在上面的示例中,CHARINDEX 在缺省的起始位置 1 开始它的搜索。
下列函数表达式返回 2:
CHARINDEX('w','www.ibm.com',2)
在上面的示例中,由于最后的参数在位置 2 开始搜索,因此,CHARINDEX 忽略两
个其他的相匹配的子字符串:

位置 1 中的 'w',因为搜索开始于 2,

以及位置 3 的 'w',因为该函数仅返回相匹配的子字符串第一次出现的
位置。
INSTR 函数
INSTR 函数从字符串搜索指定的子字符串,并基于子字符串出现的次数返回在那
个字符串中子字符串终止出现处的字符位置。
INSTR 函数有此语法:
INSTR 函数

元素
描述
限制
语法
count
求值为 > 0 整数的
表达式
必须为表达式、常量、列或
内建的整数类型或可转换为
整数的主变量。
表达

source_string
求值为字符串的表达

必须为表达式、常量、列或
内建的字符数据类型或可转
换为字符类型的主变量
表达


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1485
元素
描述
限制
语法
start
在 source_string
中开始搜索的顺序位
置,在此,1 是第一
个逻辑字符
必须为表达式、常量、列或
内建的整数类型或可转换为
正的或负的整数的主变量
表达

substring
求值为字符串的表达

必须为表达式、常量、列或
内建的字符数据类型或可转
换为字符类型的主变量
表达

INSTR 的参数不可为用户定义的数据类型。
在这些情况下,该函数返回 NULL:

count 小于或等于零(0)。

source_string 为 NULL 或长度为零。

substring 为 NULL 或长度为零。
在下列情况下,返回值为零(0):

如果在 source_string 发现没有出现 substring,

如果 start 大于 source_string 的长度。

如果在 source_string 中 substring 的出现少于 count,
如果您省略可选的 count 参数,则缺省的 count 值为 1。
在支持多字节字符集的语言环境中,返回值为 source_string 中逻辑字符之中的顺
序值。在单字节语言环境中,比如缺省的语言环境,返回值等同于字节位置,在
此,第一个字节在位置 1 中。
start 位置
如果省略 start 或指定 start 为零,则对 substring 的搜索从字符位置 1 开
始。如果 start 为负的,则在 source_string 结束的位置开始搜索 substring
的出现,并向着开头方向处理。

在从左至右的语言环境中,负的 start 值指定从右至左的搜索。

在从右至左的语言环境中,负的 start 值指定从左至右的搜索。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1486
然而,在这两种类型的语言环境中,都是在 source_string 之内对应于 start 的绝
对值的逻辑字符位置上开始搜索。
在从右至左的语言环境中,负的 start 值指定从左至右的搜索。
INSTR 函数表达式的示例
下列表达式都是基于相同的 source_string 和 substring 的。此示例返回 3,
作为第一个 'er' 子字符串的字符位置:
INSTR("wwerw.ibm.cerom", "er")
在上面的示例中,start 和 count 都缺省为 1。
下一个示例在第二个字符位置开始搜索,带有缺省的 count 1:
INSTR("wwerw.ibm.cerom", "er", 2)
上面的表达式返回 3,从左至右的搜索在第一个 'er' 子字符串中遇到的第一个
字符的位置。
下一个示例指定 count 2,在 source_string 的第一个字符中开始搜索:
INSTR("wwerw.ibm.cerom", "er", 1, 2)
上面的表达式返回 12,第二个 'er' 开始的位置。
下列示例指定 -5 作为开始的位置,且 count 指定在 source_string 的第 5 个
位置与开头之间 "er" 的第一次出现:
INSTR("wwerw.ibm.cerom", "er", -5, 1)
这返回 3,对应于从那个位置开始 "er" 子字符串的第一次出现。负的 start 参
数指定从右至左的查询,但返回值为 3,因为在缺省的语言环境中,字符串和子
字符串的读方向为从左至右的。
LEFT 函数
LEFT 函数从字符串参数返回由最左边 N 个字符组成的子字符串。
该函数有此语法:
LEFT 函数


GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1487
元素
描述
限制
语法
position
在字符串中的(从左
边开始的)顺序位
置;要返回此字符及
左边的所有字符
必须为表达式、常量、列或
内建的整数类型或可转换为
整数的主变量
表达

source_string
求值为字符串的表达

必须为表达式、常量、列或
可转换为字符类型的数据类
型的主变量
表达

LEFT 函数的参数不可为用户定义的数据类型。
在从左至右的语言环境中,比如缺省的 U.S. English 语言环境,此函数从
source_string 返回开头字符的子字符串。
LEFT 函数返回的内容依赖于 source_string 中逻辑字符的数目以及 position 的
值:

如果 source_string 求值为带有多于 position 个字符的字符串,则返回值
为 source_string 的子字符串,由指定的 position 左边的所有字符组成。

如果 source_string 求值为带有不多于 position 个字符的字符串,则返回
值为整个 source_string。

如果 source_string 求值为 NULL,或如果 position 为零或负的,则返回
NULL。

如果未指定 position 参数,则不返回字符串值,并发出例外。
返回数据类型与它的 source_string 参数相同。如果主变量是源,则返回值为
NVARCHAR 或 NCHAR,根据返回的字符串的长度来定,使用 来自 CONCAT
函数的返回类型 部分描述的返回类型提升规则。
下列函数表达式请求引号括起的字符串的前五个字符:
LEFT('www.gbase.cn',5)
在此示例中,LEFT 函数返回子字符串 www.g
RIGHT 函数
RIGHT 函数从字符串参数返回有最右边的 N 个字符组成的子字符串。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1488
该函数有此语法:
RIGHT 函数

元素
描述
限制
语法
position
字符串中的(从右边
开始的)顺序位置;
返回此字符及右边的
所有字符
必须为表达式、常量、列或
内建的整数类型或可转换为
整数的主变量
表达

source_string
求值为字符串的表达

必须为表达式、常量、列或
可转换为数值类型的数据类
型的主变量
表达

RIGHT 函数的参数不可为用户定义的数据类型。
在从左至右的语言环境中,比如缺省的 U.S. English 语言环境,此函数从
source_string 返回末尾的字符的子字符串。
RIGHT 函数返回的内容依赖于 source_string 中逻辑字符的数目以及 position 的
值:

如果 source_string 求值为带有多于 position 个字符的字符串,则返回值
为 source_string 的子字符串,由指定的 position 右边的所有字符组成。

如果 source_string 求值为带有不多于 position 个字符的字符串,则返回
值为整个 source_string。

如果 source_string 求值为 NULL,或如果 position 为零或负的,则返回
NULL。

如果未指定 position 参数,则不返回字符串值,并发出例外。
返回数据类型与它的 source_string 参数相同。如果主变量是源,则返回值为
NVARCHAR 或 NCHAR,根据返回的字符串的长度来定,使用 来自 CONCAT
的返回类型 部分的返回类型提升规则。
下列函数表达式请求由引号括起的字符串的最后五个字符:
RIGHT('www.gbase.cn',5)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1489
在此示例中,RIGHT 函数返回子字符串 se.cn
SUBSTR 函数
SUBSTR 函数与 SUBSTRING 函数有相同的目的(返回源字符串的子集),但它使
用不同的语法。
SUBSTR 函数

元素
描述
限制
语法
length
要从 source_string
返回的字符的数目
必须为表达式、文字、列
或返回整数的主变量
表达

source_string
作为 SUBSTR 函数的
输入的字符串
必须为表达式、文字、列
或可转换为字符数据类型
的数据类型的主变量
表达

start_position
source_string 中的
列位置,SUBSTR 函
数从此位置开始返回
字符
必须为整数表达式、文
字、列或主变量。可有正
号(+)、负号(-)或无
符号。
精确
数值
SUBSTR 函数的任何参数都必须为内建的数据类型。
SUBSTR 函数返回 source_string 的子集。该子集从 start_position 指定的列
位置开始。下列表格展示数据库服务器如何基于 start_position. 的输入值来确
定返回的子集的起始位置
Start_Position
的值
数据库服务器如何确定返回的子集的起始位置
正的
从 source_string 中的第一个字符开始向前计数
零(0)
从 source_string 中的第一个字符向前计数(也就是
说,将 start_position 0 处理为等同于 1)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1490
Start_Position
的值
数据库服务器如何确定返回的子集的起始位置
负的
从紧跟在 source_string 中最后一个字符的原始字符向
后计数。值 -1 返回 source_string 中的最后一个字
符。
length 参数指定子集中逻辑字符的数目(不是字节数)。如果您省略 length 参
数,则 SUBSTR 函数返回从 start_position 处开始的 source_string 的整个部
分。
如果您指定负的 start_position,其绝对值大于 source_string 中字符的数目,或如
果 length 大于从 start_position 至 source_string 的末尾的字符的数目,则
SUBSTR 返回 NULL。(在此情况下,SUBSTR 的行为不同于 SUBSTRING 函
数的行为,返回从 start_position 至 source_string 的最后一个字符的所有字符,
而不是返回 NULL。)
返回数据类型是 source_string 参数的类型。如果主变量是源,则返回值为
NVARCHAR 或 NCHAR,根据返回的字符串的长度来定,使用 来自 CONCAT
的返回类型 部分描述的返回类型提升规则。
下列示例指定要返回的字符串从 7 个字符的 source_string 结束之前的开始位
置 3 个字符开始。这意味着开始的位置是 source_string 的第五个字符。因为
用户未指定 length 的值,数据库服务器返回包括从字符位置 5 至
source_string 的结尾的所有字符。
SELECT SUBSTR('ABCDEFG', -3) FROM mytable;
下列表格展示此 SELECT 语句的输出。
(constant)
EFG
SUBSTRB 函数
返回字符串的子字符串,在字符串中指定的位置开始。
SUBSTRB 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1491

元素
描述
length
指定以字节计的结果的长度的表达式。如果指定,则
表达式必须返回内建的数值、CHAR 或 VARCHAR 数据
类型的值。如果该值不是 INTEGER 类型,在对该函数
求值之前,隐式地将它强制转型为 INTEGER。
如果 length 的值大于从字符串的起始位置到结束的字
节数,则结果的长度等于第一个参数的长度减去起始
位置,加一。
如果 length 的值小于或等于零,则 SUBSTRB 的结果
为 NULL 字符串。
length 的缺省值是从由 starting_position 指定的位置
到字符串最后的字节的字节数。
当指定 length 时,将结果字符串的长度截断为
length 的值。在下列示例中,my_string 是 10 字节
的字符串,限定结果字符串为 5 字节:
substrB(my_string, 3, 5)
在前面的示例中,如果 my_string 是 4 字节的字符
串,且起始位置为第三个字节,则返回 2 字节的字符
串。
如果未指定 length,则结果的长度为从
starting_position 开始的 source_string 的长度。
在下列示例中,my_string 是 10 字节的字符串,返
回 8 字节的字符串:
substrB(my_string, 3)
source_string
指定从其派生结果的字符串的表达式。该表达式必须
返回内建的字符串、数值或 datetime 数据类型的
值。如果该值不是字符串数据类型,则在对该函数求
值之前,隐式地将它强制转型为 NVARCHAR。对于零长
度结果,返回 NULL 值。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1492
元素
描述
starting_position
指定结果子字符串的开头的字符串中起始位置的表达
式。该表达式必须返回内建的数值、CHAR 或 VARCHAR
数据类型的值。如果该值不是 INTEGER 类型,则在对
该函数求值之前,隐式地将它强制转型为 INTEGER。
如果 starting_position 是正的,则从该字符串的开头
计算起始位置。如果 starting_position 大于字符串的
length,则返回空字符串。如果 starting_position 是负
的,则从该字符串的末尾计算起始位置,且向后对字
节数计数。如果 starting_position 的绝对值大于
source_string 的 length,则返回空字符串。如果
starting_position 为 0,则使用起始位置 1。
注: 所有的 length 和 starting_position 的单位
都以字节表示,即使对于在多字节代码集中编码的字
符串。SUBSTR 使用多字节字符串的逻辑字符大小。例
如,如果在传统的 SBSTR 中 starting_position 为
2,且多字节字符串的第一个字符需要 3 字节的存
储,则 2 表示字符串中的第四个字节。在 SUBSTRB
中,2 表示字符串中的第二个字节。
如果 source_string 是 CHAR 或 VARCHAR 数据类型,则该函数的结果是
VARCHAR 数据类型。 GBase 8s 不支持多代码页;相反, GBase 8s JDBC 或
ODBC 将代码页翻译到数据库。
如果任何参数为空,则结果为空值。
在动态 SQL 中,可由主变量来表示 source_string、starting_position 和 length。
如果主变量用作 source_string,则运算对象的数据类型为 VARCHAR,且运算对
象可为空。
在上述结果定义中虽未显式地说明,但语义表明,如果 source_string 是多字节字
符串,则结果可能包含多字节字符的片段,这依赖于 starting_position 和 length
的值。例如,结果可能起始于多字节字符的第二个字节,或终止于多字节字符的
第一个字节。SUBSTRB 函数检测这些部分的字符并以单个空格字符代替不完整

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1493
字符的每一字节。SUBSTRB 返回固定的字节数;使用 SUBSTR,返回的数目根
据多字节字符串而不同。
SUBSTRING 函数
SUBSTRING 函数返回字符串的子集。
SUBSTRING 函数

元素
描述
限制
语法
length
要从
source_string
返回的字符数
必须为返回整数的表达式、
常量、列或主变量
精确数值
source_string
SUBSTRING 函数
的字符串参数
必须为其值可转换为字符数
据类型的表达式、常量、列
或主变量
表达式
start_position

source_string
中返回首个字符
的位置
必须为返回整数的表达式、
常量、列或主变量
精确数值
SUBSTRING 函数的任何参数都必须为内建的数据类型。
返回数据类型是 source_string 参数的数据类型。如果主变量是源,则返回值为
NVARCHAR 或 NCHAR,根据返回的字符串的长度来定,使用 来自 CONCAT
函数的返回类型 部分描述的返回类型提升规则。
该子集开始于 start_position 指定的列位置。下列表格展示数据库服务器如何
基于 start_position 的输入值来确定返回的子集的起始位置。
Start_Position
的值
数据库服务器如何确定返回子集的起始位置
正的
从 source_string 中的第一个字符向前计数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1494
Start_Position
的值
数据库服务器如何确定返回子集的起始位置
例如,如果 start_position = 1,则 source_string 中的第
一个字符是返回的子集中的第一个字符。
零(0)
从 source_string
中的第一个字符之前(即,左边的第一个字符)的一个位
置计数
例如,如果 start_position = 0 且 length = 1,则数据库
服务器返回 NULL,反之如果 length = 2,数据库服务器
返回 source_string 中的第一个字符。
负的
从 source_string 中的最后一个字符之后(即,右边的第
一个字符)的一个位置向后计数
例如,如果 start_position = -1,则返回的子集的起始位
置是 source_string 中的最后一个字符。
由 length 指定子集的大小。length 参数指的是逻辑字符的数目,而不是字节
数。如果您省略 length 参数,或如果您指定的 length 大于从 start_position
至 source_string 的末尾的字符数,则 SUBSTRING 函数返回开始于
start_position 的 source_string 的整个部分。下列示例指定起始于列位置 3
的源字符串的子集,且应返回两个字符长。:
SELECT SUBSTRING('ABCDEFG' FROM 3 FOR 2) FROM mytable;
下列表格展示此 SELECT 语句的输出。
(constant)
CD
在下列示例中,用户为返回子集指定负的 start_position:
SELECT SUBSTRING('ABCDEFG' FROM -3 FOR 7) FROM mytable;
数据库服务器在位置 -3 开始(第一个字符之前的四个位置)并向前计数 7 字
符。下列表格展示此 SELECT 语句的输出。
(constant)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1495
ABC
SUBSTRING_INDEX 函数
SUBSTRING_INDEX 函数搜索指定的定界符字符的字符串,并基于您指定作为
该函数的参数的定界符的计数返回开头或收尾字符的子字符串。
SUBSTRING_INDEX 函数有此语法:
SUBSTRING_INDEX 函数

元素
描述
限制
语法
source_
string
求值为字符串的表达式 必须为内建的字符数据类型,
或可转换为字符类型的表达
式、常量、列或主变量
表达式
count
求值为正整数或负整数
的表达式
必须为内建的整数类型,或可
转换为整数的表达式、常量、
列或主变量。
表达式
delimiter
求值为字符串的表达式 必须为内建的字符数据类型,
或可转换为字符类型的表达
式、常量、列或主变量
表达式
SUBSTRING_INDEX 的参数不可为用户定义的数据类型。
在下列的每一情况下,此函数返回 NULL:

source_string 为 NULL

delimiter 为 NULL

count = 零(0)。
如果该搜索在 source_string 中找到少于 count 个定界符,则返回值为整个
source_string。
返回值与 source_string 的数据类型相同。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1496
对于 source_string,count 的符号决定返回的值是 source_string 中开头字符
的子字符串还是收尾字符的子字符串:

对于 N = count,返回的子字符串的最后的字符紧接在开头的字符的子字
符串中那个定界符第 N 次出现的前面。
例如函数表达式
SUBSTRING_INDEX("www.gbase.cn", ".", 2)
返回开头字符 www.gbase,因为 count > 0。

对于 N = count < 0,返回的子字符串中的第一个字符紧接在收尾字符的子
字符串中那个定界符第 N 次出现之前。
例如,函数表达式
SUBSTRING_INDEX("www.gbase.cn", ".", -2)
返回收尾字符 gbase.cn,因为 count < 0。
上述示例适用于诸如缺省的 U.S. English 语言环境这样的从左至右的语言环境,
其中 count 的负值导致此函数从 source_string 返回收尾字符的子字符串,而
count 的正值导致此函数从 source_string 返回开头字符的子字符串。
在支持多字节字符集的语言环境中,返回值是 source_string 中的逻辑字符之中的
顺序值。在诸如缺省的语言环境这样的语言环境中,返回值等同于字节位置,在
此,第一个字节在位置 1。
FORMAT_UNITS 函数
FORMAT_UNITS 函数可解释指定内存或大量存储的单位的数目和缩写名称的字
符串。
此内建的函数可接受一个、两个或三个由引号括起的字符串参数。您可调用通过
内存或大量存储的字节或更大的单位(比如,kilobyte、megabyte、gigabyte 等
等)的标准缩写来表示处理大小规范的 SQL 语句中的 FORMAT_UNITS。
还可通过 SQL 管理 API ADMIN 和 TASK 函数来在 sysadmin 数据库中内部
调用 FORMAT_UNITS 函数,在 GBase 8s 管理员参考 中有对其的描述。
FORMAT_UNITS 函数

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1497

元素
描述
限制
语法
number
求值为存储或内
存 units 的数目
的表达式
必须为文字数值或指定可转换为
FLOAT 的数目的由引号括起的字符串
表达

precision 要从 number 返
回的有效数值的
整数数目
必须为文字数值或指定整数的引用字
符串
表达

units
存储或内存的单
位的缩写;缺省
值为 'B'(表示
字节)
必须以 'B'、'K'、'M'、'G'、'T'、
'P' 或 'PB'(或这些字母的小写形
式)开头。忽略任何收尾字符。
引用
字符

此内建的函数可接受一个、两个或三个参数。返回的值是展示指定的 number 和
展示存储单位的适当的格式标签的字符串。如果您指定 precision 作为最后的参
数,则以那个精度返回 number。否则,在缺省情况下,将 number 格式化为精
度 3(%3.3lf)。
同样的表示法也适用于所有 SQL 管理 API ADMIN 和 TASK 命令的参数(效仿
Enterprise Replication cdr 实用程序的命令除外),这些参数指定内存、存盘
存储或地址偏移量的大小:
表示法 对应的单位
'B' 或 'b' 字节(= 以 2 为底,指数为 0)
'K' 或 'k' 千字节(= 以 2 为底,指数为 10)
'M' 或 'm' Megabyte(= 以 2 为底,指数为 20)
'G' 或 'g' Gigabyte(= 以 2 为底,指数为 30)
'T' 或 't' Terabyte(= 以 2 为底,指数为 40)
'PB' Petabyte(= 以 2 为底,指数为 50)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1498
'P' 页(= 2 千字节或 4 千字节,依赖于系统的基础页大小)
unit 规范中的首字母('B'、'K'、'M'、'G' 或 'T')确定计量的单位,并忽略任
何收尾的字符。然而,有一个例外,那就是在字符串中首字母 'P'(或 'p')紧
跟着 'B' 或 'b',因为在此情况下,将该字符解释为 petabyte。将任何其他以 "P"
(比如 "PA"、"pc"、"PhD"、"papyrus",等等)起始的字符串解释为指定
pages,而不是指定 petabytes。
如果一个参数同时提供 number 和 units 规范,则 GBase 8s 忽略将 number 规
范从 FORMAT_UNITS 或 SQL 管理 API ADMIN 或 TASK 函数的同一参数
之内的 units 规范分隔开的任何空格。例如,将规范 '128M' 与 '128 m' 都
解释为 128 megabyte。
下列示例以单个参数调用 FORMAT_UNITS 函数:
EXECUTE FUNCTION FORMAT_UNITS('1024 M');
返回下列字符串值。
(expression)

node (172.168.83.14)
check database backup begin

会话管理........................................ 342

GBaseDataStudio 管理工具手册
II
南大通用数据技术股份有限公司