SUBSTRB 函数

返回字符串的子字符串,在字符串中指定的位置开始。

SUBSTRB 函数
元素 描述
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 值。
starting_position 指定结果子字符串的开头的字符串中起始位置的表达式。该表达式必须返回内建的数值、CHAR 或 VARCHAR 数据类型的值。如果该值不是 INTEGER 类型,则在对该函数求值之前,隐式地将它强制转型为 INTEGER。

如果 starting_position 是正的,则从该字符串的开头计算起始位置。如果 starting_position 大于字符串的 length,则返回空字符串。如果 starting_position 是负的,则从该字符串的末尾计算起始位置,且向后对字节数计数。如果 starting_position 的绝对值大于 source_stringlength,则返回空字符串。如果 starting_position 为 0,则使用起始位置 1。

注: 所有的 lengthstarting_position 的单位都以字节表示,即使对于在多字节代码集中编码的字符串。SUBSTR 使用多字节字符串的逻辑字符大小。例如,如果在传统的 SBSTR 中 starting_position2,且多字节字符串的第一个字符需要 3 字节的存储,则 2 表示字符串中的第四个字节。在 SUBSTRB 中,2 表示字符串中的第二个字节。

如果 source_string 是 CHAR 或 VARCHAR 数据类型,则该函数的结果是 VARCHAR 数据类型。 GBase 8s 不支持多代码页;相反, GBase 8s JDBC 或 ODBC 将代码页翻译到数据库。

如果任何参数为空,则结果为空值。

在动态 SQL 中,可由主变量来表示 source_stringstarting_positionlength。如果主变量用作 source_string,则运算对象的数据类型为 VARCHAR,且运算对象可为空。

在上述结果定义中虽未显式地说明,但语义表明,如果 source_string 是多字节字符串,则结果可能包含多字节字符的片段,这依赖于 starting_positionlength 的值。例如,结果可能起始于多字节字符的第二个字节,或终止于多字节字符的第一个字节。SUBSTRB 函数检测这些部分的字符并以单个空格字符代替不完整字符的每一字节。SUBSTRB 返回固定的字节数;使用 SUBSTR,返回的数目根据多字节字符串而不同。