SQL 分离字符串
作者:谢景,撰写时间:2019-2-13
在做项目中,我们常常需要对一段字符串进行分离,例如:i,you,my live中获取我们需要的数据,
在C#中,字符串直接分离成数组,简单易懂,但是SQL中没有数组,想把字符串分离需要的数据有些费脑,小编上网查找资料并总结出方法。下面讲解一下思路!
首先,介绍一下会用到的函数及用法:
1、LEN() 函数:
解释:返回文本字段中值的长度。
eg:
LEN('1234') //返回4
2、CHARINDEX() 函数:
解释:CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置
CHARINDEX ( x , y, [len] )
注意:x是要到y中寻找的字符中,len是CHARINDEX函数开始在y中找x的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”
eg:
CHARINDEX('Q', 'SQL Server',0) //返回 2(从零开始查找)
3、SUBSTRING( )函数:
解释:SUBSTR (str, pos, len)
由 str 中的第 pos 位置开始,选出接下去的 len 个字元。
eg:
SUBSTR('abcd',1,2)
//返回ab
数据库代码如下:
declare @str varchar(100)
set @str ='i,you,my live'
declare @numer int
set @numer=0
declare @index int
set @index=(Len(@str) -
Len(Replace(@str,',','')))/Len(',')
declare @i int
set @i=0
declare @lenght int
while @numer<@index
BEGIN
set @numer=@numer+1
begin
set @lenght=CHARINDEX(',', @str,@i+1)*1-(@i+1)
end
print 'value:'+SUBSTRING(@str,@i+1,@lenght)
set @i=(CHARINDEX(',',@str,@i+1))
end
begin
print 'value:'+SUBSTRING(@str,@i+1,1000)
end
@index是获取逗号把字符串分割成多少份;
@i等于逗号的索引位置,
CHARINDEX(’,’, @str,@i+1)是获取下一个逗号的索引位置,后者减前者等于两个逗号之间的字符长度,然后用SUBSTRING(@str,@i+1,@lenght)获取字符即可。
结果如下图: