SUBSTRB
功能描述
从字符串expr1
中截取第expr2
个字节到末尾的子字符串。 指定expr3
时,则从expr1
的第expr2
个字节开始截取expr3
字节长度的子串。
SUBSTRB是基于字节位置提取子字符串的,SUBSTR是基于字符位置提取子字符串。
语法格式
SUBSTRB (expr1, expr2 [, expr3 ])
参数说明
expr1
:要从中截取子字符串的源字符串。expr2
:为截取的起始位置(单位为字节);无论正负,截取方向总是向右。- 为正数时,截取开始位置从左向右数;绝对值大于字符串长度时结果为NULL。
- 为0时,截取整个字符串。
- 为负数时,截取开始位置从右向左数;绝对值大于字符串长度时结果为NULL。
expr3
:要截取的子字符串的长度(单位为字节);该值小于1时结果为NULL。- 两个参数时:
expr2
为INTEGER类型。 - 三个参数时:
expr2
与expr3
为NUMERIC类型。
注意:
如果待截取的字符串为多字节字符,在不同字符集的库中执行结果可能有差别:例如中文在UTF8库中一个字符占3个字节,在GBK库中一个字符占2个字节。
函数返回类型
VARCHAR类型字符串。
示例
从左边数第二个字节处开始截取到字符串末尾:
sql
SELECT SUBSTRB('abcdefg', 2);
EXPR1 |
------------------------------------------------------------------------------
bcdefg|
从右边数第二个字节处开始截取到字符串末尾:
sql
SELECT SUBSTRB('abcdefg', -2);
EXPR1 |
------------------------------------------------------------------------------
fg|
从左边数第二个字节处开始截取字符串5个字节长度的字符:
sql
SELECT SUBSTRB('abcdefg', 2, 3);
EXPR1 |
------------------------------------------------------------------------------
bcd|
说明:
下面示例以字符集UTF8为例,一个字符占3个字节。
从目标字符串第七个字节(此处为第三个字符)处开始截取,向右截取至目标串结尾:
sql
SELECT SUBSTRB('一二三四五六', 7);
EXPR1 |
------------------------------------------------------------------------------
三四五六|
从目标字符串第七个字节(此处为第三个字符)处开始截取,向右截取6个字节(此处为两个字符):
sql
SELECT SUBSTRB('一二三四五六', 7, 6);
EXPR1 |
------------------------------------------------------------------------------
三四|