【发布时间】:2016-10-11 12:12:55
【问题描述】:
我是 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
【问题讨论】:
-
看起来像是学校的家庭作业。如果对列号没有限制,则必须使用动态查询。
-
这里有一些性能更好的分离器选项。 sqlperformance.com/2012/07/t-sql-queries/split-strings 要将其重新放入列中,您需要使用动态交叉表或动态枢轴。
-
对于刚刚学习 t-sql 的人来说,这是一个非常高级的问题。
-
@SeanLange 这是一个 ETL 类。 ;)
标签: sql sql-server string split