写点什么

YashanDB SUBSTRING_INDEX 函数

作者:YashanDB
  • 2025-08-04
    广东
  • 本文字数:2548 字

    阅读完需:约 8 分钟

SUBSTRING_INDEX

语法图

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) dFROM 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) dFROM 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)) fFROM 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) dFROM DUAL;A B C D ----- ----- ----- -----
复制代码

代码

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) dFROM 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) dFROM 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)) fFROM 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) dFROM DUAL;A B C D ----- ----- ----- -----
复制代码


用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB SUBSTRING_INDEX函数_数据库 大数据_YashanDB_InfoQ写作社区