Skip to content

SUBSTRB

功能描述

从字符串expr1中截取第expr2个字节到末尾的子字符串。 指定expr3时,则从expr1的第expr2个字节开始截取expr3字节长度的子串。

SUBSTRB是基于字节位置提取子字符串的,SUBSTR是基于字符位置提取子字符串。

语法格式

SUBSTRB (expr1, expr2 [, expr3 ])

参数说明

  • expr1:要从中截取子字符串的源字符串。
  • expr2:为截取的起始位置(单位为字节);无论正负,截取方向总是向右。
    • 为正数时,截取开始位置从左向右数;绝对值大于字符串长度时结果为NULL。
    • 为0时,截取整个字符串。
    • 为负数时,截取开始位置从右向左数;绝对值大于字符串长度时结果为NULL。
  • expr3:要截取的子字符串的长度(单位为字节);该值小于1时结果为NULL。
  • 两个参数时:expr2为INTEGER类型。
  • 三个参数时:expr2expr3为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 | 
------------------------------------------------------------------------------
三四|