使用SQL如何把用逗号等字符隔开的字符串转换成列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQL如何把用逗号等字符隔开的字符串转换成列表相关的知识,希望对你有一定的参考价值。

如何把用逗号等字符隔开的字符串转换成列表,下面依逗号分隔符为例:

比如有一个字符串,其值为:香港,张家港,北京,上海
用SQL把这个字符串转换成列表的方法是:
1、方法一

WITH A AS (SELECT '香港,张家港,北京,上海' A FROM DUAL)
SELECT DECODE(B,0,SUBSTR(A,C),SUBSTR(A,C,B-C)) city FROM
(
SELECT A,B,(LAG(B,1,0) OVER(ORDER BY LV))+1 C
FROM(
SELECT A,INSTR(A,',',1,LEVEL) B,LEVEL LV FROM A
CONNECT BY LEVEL <=(LENGTH(A) - LENGTH(REPLACE(A,',','')))+1
)
)
参考技术A set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER function [dbo].[分解字符到表_1]
( @字符串变量 varchar(8000),@分隔符 varchar(1) )
returns @ca1 table(代单号 varchar(100))
as
begin
-- declare @字符串变量 varchar(8000),@分隔符 varchar(1)
-- declare @ca1 table(代单号 varchar(100))
-- set @字符串变量='^^^'
-- set @分隔符='^'
declare @cAllDdh varchar(8000)
declare @aa varchar(100)
set @cAllDdh=ltrim(rtrim(@字符串变量))
set @aa=''
while charindex(@分隔符,@cAllDdh)>0
begin
if charindex(@分隔符,@cAllDdh)>0
begin
set @aa=left(@cAllDdh ,charindex(@分隔符,@cAllDdh )-1) --set @nID=cast(left(@cAllDdh ,charindex(@分隔符,@cAllDdh )-1) as int)
end
else begin --set @nID=cast(@cHid as int)
set @aa=@cAllDdh
end
set @aa=rtrim(ltrim(@aa))
set @aa=replace(@aa,char(13),'')
insert into @ca1(代单号) values(@aa)
if len(@cAllDdh)-len(@aa)>0
set @cAllDdh=substring(@cAllDdh,charindex(@分隔符,@cAllDdh)+1,len(@cAllDdh)-len(@aa)) --将ID字符串去除已截取的部分
end
insert into @ca1(代单号) values(@cAllDdh)
return
end

以上是关于使用SQL如何把用逗号等字符隔开的字符串转换成列表的主要内容,如果未能解决你的问题,请参考以下文章

SQL中逗号分隔的查询结果转换成单个字符串放到in语句里

解决mysql查询,in条件参数为带逗号的字符串,查询结果错误

sql 如何以逗号为分隔符分割一个字段的值

mysql查询某数字在某字段以逗号隔开的字符里面

sql server里如何将一组用逗号分隔的字符串分解并插入到另一张表中,比如:11873,27827, 也可能是好多

MSSQL 带逗号的字符型字符串数值,如何转换成数值型