分割字符串的sql

博客展示了一段SQL代码,通过设置字符串和分隔符,利用SUBSTR和INSTR函数对字符串进行分割,从而获取一个个Token。代码运行后输出了分割后的Token及其对应的行号。
set ver off def Del='@' def String="@0@11@222@3333@44444@555555@6666666@77777777@888888888" select Rownum Row#, SUBSTR(A.Str||'&Del' , INSTR(A.Str||'&Del' , '&Del', 1, Rownum ) +1 , INSTR(A.Str||'&Del' , '&Del', 1, Rownum+1) -INSTR(A.Str||'&Del' , '&Del', 1, Rownum ) -1 ) Token From ( select '&String' Str from dual ) A, all_objects B where Rownum< length(A.Str)-length(REPLACE(A.Str,'&Del'))+1 ; ROW# TOKEN ---------- ------------------------------------------------------- 1 0 2 11 3 222 4 3333 5 44444 6 555555 7 6666666 8 77777777 9 888888888
不同的数据库系统有不同的函数来处理字符串分割,以下是常见数据库系统中分割字符串的方法: ### MySQL 在 MySQL 中,可以使用 `SUBSTRING_INDEX` 函数来分割字符串。`SUBSTRING_INDEX` 函数返回从字符串的第 `count` 个出现的分隔符 `delim` 之前或之后的子字符串。如果 `count` 为正数,则返回分隔符左侧的子字符串;如果 `count` 为负数,则返回分隔符右侧的子字符串。 示例代码如下: ```sql -- 示例字符串 SET @str = 'apple,banana,orange'; -- 获取分隔符第一次出现前的子字符串 SELECT SUBSTRING_INDEX(@str, ',', 1); -- 获取分隔符第二次出现后的子字符串 SELECT SUBSTRING_INDEX(@str, ',', -2); ``` ### PostgreSQL 在 PostgreSQL 中,可以使用 `STRING_TO_ARRAY` 函数将字符串按指定分隔符分割数组,然后可以通过数组下标访问分割后的元素。 示例代码如下: ```sql -- 示例字符串 SELECT (STRING_TO_ARRAY('apple,banana,orange', ','))[1]; ``` ### SQL Server 在 SQL Server 中,可以使用 `STRING_SPLIT` 函数(SQL Server 2016 及以上版本支持)将字符串按指定分隔符分割多个行。 示例代码如下: ```sql -- 示例字符串 SELECT value FROM STRING_SPLIT('apple,banana,orange', ','); ``` ### Oracle 在 Oracle 中,没有直接的字符串分割函数,但可以通过自定义函数或者使用正则表达式来实现字符串分割。以下是一个使用正则表达式的示例: ```sql SELECT REGEXP_SUBSTR('apple,banana,orange', '[^,]+', 1, LEVEL) AS value FROM DUAL CONNECT BY REGEXP_SUBSTR('apple,banana,orange', '[^,]+', 1, LEVEL) IS NOT NULL; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值