7
嗨单个字符我有一个输入为分割字符串转换成SQL Server 2005中
ID data
1 hello
2 sql
所需的输出是
ID RowID Chars
1 1 H
1 2 e
1 3 l
1 4 l
1 5 o
2 1 s
2 2 q
2 3 l
我的做法至今被
Declare @t table(ID INT IDENTITY , data varchar(max))
Insert into @t Select 'hello' union all select 'sql'
--Select * from @t
;With CteMaxlen As(
Select MaxLength = max(len(data)) from @t)
, Num_Cte AS
(
SELECT 1 AS rn
UNION ALL
SELECT rn +1 AS rn
FROM Num_Cte
WHERE rn <(select MaxLength from CteMaxlen)
)
-- Shred into individual characters
, Get_Individual_Chars_Cte AS
(
SELECT
ID
,Row_ID =ROW_NUMBER() Over(PARTITION by ID Order by ID)
,chars
FROM @t,Num_Cte
CROSS APPLY(SELECT SUBSTRING((select data from @t),rn,1) AS chars) SplittedChars
)
Select * from Get_Individual_Chars_Cte
的查询根本不起作用,例外是
Msg 512,Level 16,State 1,Line 4
子查询返回多个值。 当 子查询遵循=,!=,<,< =,>,> = 或当子查询用作 表达式时,这是不允许的。
编辑:
我发现我的答案
;with Get_Individual_Chars_Cte AS
(
SELECT
ID,
Row_ID =ROW_NUMBER() Over(PARTITION by ID Order by ID)
,SUBSTRING(Data,Number,1) AS [Char]--,
FROM @t
INNER JOIN master.dbo.spt_values ON
Number BETWEEN 1 AND LEN(Data)
AND type='P'
)
Select * from Get_Individual_Chars_Cte
帮助需要
其实我answerd我自己的问题,因为在我有少点声望值,在格兰质疑体中提到的编辑部分。但谢谢你的答案,我会接受你的,但我的工作也很好。我请求,因为你有更多的声誉,你有可能拿出我的答案并粘贴答案部分?如果是这样,如果您觉得我的回答与您的回答一样正确,请做好必要的工作。 – aditi 2011-06-16 05:53:59
@aditi - 你应该能够回答你自己的问题。代表100以下的用户可能会有一个时间限制(8小时?)。在常见问题解答中找不到它,但我记得阅读过这些内容。 48小时后,您可以**接受**自己的答案。 – 2011-06-16 06:15:06