#SUBSTRING_INDEX

substring_index
SUBSTRING_INDEX ( expr , delim , count )

SUBSTRING_INDEX函数提取expr表示的字符串中在分隔符指定次数出现之前的子字符串。

expr

expr的值须为字符型,或除JSON、LOB、XMLTYPE类型外可转化为字符型的其他类型。

  • 当expr的值为NULL时,函数返回NULL。

  • 当expr为NCHAR/NVARCHAR类型时,返回值为NVARCHAR类型,其余场景返回值为VARCHAR类型。

delim

表示分隔符,用于分割expr。delim为与expr相同的通用表达式,须为字符型,或除JSON、LOB、XMLTYPE类型外可转化为字符型的其他类型。

  • 若使用非字符型的形式输入(0,1)之间的小数,转换后的delim将去除小数点前的0进行匹配。

  • 当delim的值为NULL时,函数返回NULL。

  • 当delim在expr中未匹配到时,函数将返回expr全部内容。

count

表示分隔符出现的次数,用于定位分割的终止位置。count为与expr相同的通用表达式,须为除BIT外数值型数据,或可转换为NUMBER的其他类型数据,取值范围[-2147483648,2147483647]。

  • 当count的值为带有小数的NUMBER类型时,函数将其四舍五入至整数。

  • 当count的值为浮点类型时,函数将其奇进偶舍至整数。

  • 当count的值为NULL或0时,函数返回NULL。

  • 当count的值为正数,则返回分隔符第count次出现时左侧的所有内容(从左侧开始计数)。

  • 当count的值为负数,则返回分隔符第count次出现时右侧的所有内容(从右侧开始计数)。

  • 当count的值超出delim在expr中的出现次数时,函数将返回expr全部内容。

示例

SELECT SUBSTRING_INDEX('192.168.0.1',0.1, 1) a
,SUBSTRING_INDEX('192.168.0.1','.', 2) b
,SUBSTRING_INDEX('192.168.0.1','.', 3) c
,SUBSTRING_INDEX('192.168.0.1','.', 4) d
FROM DUAL;
A     B         C             D             
----- --------- ------------- ------------- 
192   192.168   192.168.0     192.168.0.1  

SELECT SUBSTRING_INDEX('192.168.0.1','.',-1) a
,SUBSTRING_INDEX('192.168.0.1','.',-2) b
,SUBSTRING_INDEX('192.168.0.1','.',-3) c
,SUBSTRING_INDEX('192.168.0.1','.',-4) d
FROM DUAL;
A     B     C         D             
----- ----- --------- ------------- 
1     0.1   168.0.1   192.168.0.1  

SELECT SUBSTRING_INDEX('192.168.0.1','.',CAST(1.5 AS NUMBER)) a
,SUBSTRING_INDEX('192.168.0.1','.',CAST(2.5 AS NUMBER)) b
,SUBSTRING_INDEX('192.168.0.1','.',CAST(1.5 AS FLOAT)) c
,SUBSTRING_INDEX('192.168.0.1','.',CAST(2.5 AS FLOAT)) d
,SUBSTRING_INDEX('192.168.0.1','.',CAST(1.5 AS DOUBLE)) e
,SUBSTRING_INDEX('192.168.0.1','.',CAST(2.5 AS DOUBLE)) f
FROM DUAL;
A         B             C         D         E         F         
--------- ------------- --------- --------- --------- --------- 
192.168   192.168.0     192.168   192.168   192.168   192.168  

SELECT SUBSTRING_INDEX(NULL,'.',1) a
,SUBSTRING_INDEX('192.168.0.1',NULL,1) b
,SUBSTRING_INDEX('192.168.0.1','.',NULL) c
,SUBSTRING_INDEX('192.168.0.1','.',0) d
FROM DUAL;
A     B     C     D     
----- ----- ----- ----- 

pdf-btn 下载文档
copy-btn 复制链接