我是SQL Server的新手,我正在处理以下问题。SQL Server:将多个字符串分隔成一行
比方说,我有一列看起来像这样:
ID String
-------------------------
1 Today is a good day!
2 Whatever
3 Hello my friend
所以我的目标是将这些句子拆分成这样:
ID String1 String2 String3 String4 String5
------------------------------------------------------
1 Today is a good day!
2 Whatever
3 Hello my friend
我使用此代码尝试:
CREATE FUNCTION [dbo].[SplitString]
(@str nvarchar(max),
@separator char(1))
RETURNS TABLE
AS
RETURN (
WITH tokens(p, a, b) AS
(
SELECT
CAST(1 AS BIGINT),
CAST(1 AS BIGINT),
CHARINDEX(@separator, @str)
UNION ALL
SELECT
p + 1,
b + 1,
CHARINDEX(@separator, @str, b + 1)
FROM
tokens
WHERE
b > 0
)
SELECT
--p-1 ItemIndex,
SUBSTRING(@str, a,
CASE WHEN b > 0 THEN b-a
ELSE LEN(@str)
END) AS Item
FROM tokens)
GO
我在这里找到了Stackoverflow。
它似乎工作,单个字符串,但它不适用于多个字符串。 而且它把每一个字在新行是这样的:
Item
Today
is
a
good
day!
那么,如何调整代码,因此它不想要的?
还有一个问题是,我并不真正知道每个字符串中的字数。
所以它可能不同,例如,从1个字到100个字。
如果有人能够帮助我解决这个问题,我将非常高兴,因为我只开始学习如何使用SQL。
谢谢! MG
看起来像在scool家庭作业。如果对列号没有限制,则必须使用动态查询。 – xdd
这里有一些更好的表演分路器选项。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings为了回到列中,您需要使用动态交叉表或动态数据透视表。 –
对于刚刚学习t-sql的人来说,这是一个相当先进的问题。 –