SQL表和字符串互转(⾏列互转)
-- 表转字符串
stuff((select top20','+cast(QQ as varchar(50)) from dl_QQ order by qq for xml path('')),1,1,'')
--字符串转表
CREATE FUNCTION Split(@Text NVARCHAR(4000),@Sign NVARCHAR(4000))
RETURNS@tempTable TABLE(id INT IDENTITY(1,1) PRIMARY KEY,[VALUE]NVARCHAR(4000))
AS
BEGIN
DECLARE@StartIndex INT--开始查的位置
DECLARE@FindIndex INT--到的位置
DECLARE@Content VARCHAR(4000)    --到的值
-
-初始化⼀些变量
SET@StartIndex=1--T-SQL中字符串的查位置是从1开始的
SET@FindIndex=0
--开始循环查字符串逗号
WHILE(@StartIndex<=LEN(@Text))
BEGIN
--查字符串函数 CHARINDEX  第⼀个参数是要的字符串
--                            第⼆个参数是在哪⾥查这个字符串
--                            第三个参数是开始查的位置
--返回值是到字符串的位置
SELECT@FindIndex=CHARINDEX(@Sign,@Text,@StartIndex)
-
-判断有没到没到返回0
IF(@FindIndex=0OR@FindIndex IS NULL)
BEGIN
--如果没有到者表⽰完了
SET@FindIndex=LEN(@Text)+1
END
--截取字符串函数 SUBSTRING  第⼀个参数是要截取的字符串
--                            第⼆个参数是开始的位置
--                            第三个参数是截取的长度
--@FindIndex-@StartIndex 表⽰的的位置-开始的位置=要截取的长度
--LTRIM 和 RTRIM 是去除字符串左边和右边的空格函数
SET@Content=LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))
--初始化下次查的位置
SET@StartIndex=@FindIndex+1
--把的的值插⼊到要返回的Table类型中
sql 字符串转数组
INSERT INTO@tempTable ([VALUE]) VALUES (@Content)
END
RETURN
END
SELECT*FROM dbo.Split('a,b,c,d,e,f,g',',')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。