[英]How to convert a CSV into columns of a single row?
我有一个逗号分隔的变量,例如
a,b,c,d,e
我希望所有这些变量都作为单行的列
喜欢
a|b|c|d|e --------
更多例子
MISC FEES,UNIV EXE,ID FEE,TENT FEE,CAU FEES,GYM FEE
这是我用逗号分隔的变量,使用SQL我需要将其转换为列
MISCFEES UNIVEXE IDFEE TENTFEE CAUFEES GYMFEE
作为单行的列值,杂项费用是第一列,univfee是下一列,依此类推
下面的函数会将逗号分隔列表的每个值分成几列,并返回一个表。
CREATE FUNCTION [dbo].[fn_CommaDelimitedToTable]
(
@String AS varchar(MAX)
)
RETURNS @RetTable Table ( DataValue varchar(500) )
AS BEGIN
DECLARE @ReturnedTable Table ( DataValue varchar(500) )
DECLARE @BreakLoop Int
DECLARE @CharIndex Int
DECLARE @StringTmp Varchar(MAX)
DECLARE @WrdTmp Varchar(500)
DECLARE @Count Int
SET @StringTmp = @String
SET @Count = 0
SET @BreakLoop = 0
WHILE @BreakLoop = 0
BEGIN
SET @CharIndex = CHARINDEX(',', @StringTmp, 1)
IF @CharIndex = 0 OR @CharIndex IS NULL
BEGIN
SET @WrdTmp = Ltrim(Rtrim(@StringTmp))
SET @BreakLoop = 1
END
ELSE
BEGIN
SET @WrdTmp = ltrim(rtrim(Left(@StringTmp, @CharIndex - 1)))
SET @StringTmp = Ltrim(rtrim(Right(@StringTmp,
Len(@StringTmp)
- Len(@WrdTmp) - 1)))
END
INSERT INTO @ReturnedTable ( DataValue )
VALUES ( @WrdTmp )
SET @WrdTmp = ''
SET @Count = @Count + 1
IF @BreakLoop = 1
BEGIN
BREAK
END
ELSE
BEGIN
CONTINUE
END
END
INSERT INTO @RetTable
SELECT DataValue
FROM @ReturnedTable
RETURN
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.