我是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。
谢谢!名爵
借助XML:
DECLARE @xml xml
;WITH cte AS (
SELECT *
FROM (VALUES
(1, 'Today is a good day!'),
(2, 'Whatever'),
(3, 'Hello my friend')
) as t(ID, String)
)
SELECT @xml = (
SELECT CAST('<i id="' + CAST(ID as nvarchar(10)) + '"><w>' + REPLACE(REPLACE(String,' ','</w><w>'),'&','&') + '</w></i>' as xml)
FROM cte
FOR XML PATH('')
)
SELECT t.v.value('@id','int') as ID,
t.v.value('w[1]','nvarchar(10)') as String1,
t.v.value('w[2]','nvarchar(10)') as String2,
t.v.value('w[3]','nvarchar(10)') as String3,
t.v.value('w[4]','nvarchar(10)') as String4,
t.v.value('w[5]','nvarchar(10)') as String5,
t.v.value('w[6]','nvarchar(10)') as String6
FROM @xml.nodes('/i') as t(v)
输出:
ID String1 String2 String3 String4 String5 String6
----------- ---------- ---------- ---------- ---------- ---------- ----------
1 Today is a good day! NULL
2 Whatever NULL NULL NULL NULL NULL
3 Hello my friend NULL NULL NULL
编辑
与实际表一起使用:
DECLARE @xml xml
SELECT @xml = (
SELECT CAST('<i id="' + CAST(ID as nvarchar(10)) + '"><w>' + REPLACE(big_string,' ','</w><w>') + '</w></i>' as xml)
FROM [table]
FOR XML PATH('')
)
SELECT t.v.value('@id','int') as ID,
t.v.value('w[1]','nvarchar(10)') as String1,
t.v.value('w[2]','nvarchar(10)') as String2,
t.v.value('w[3]','nvarchar(10)') as String3,
t.v.value('w[4]','nvarchar(10)') as String4,
t.v.value('w[5]','nvarchar(10)') as String5,
t.v.value('w[6]','nvarchar(10)') as String6,
t.v.value('w[7]','nvarchar(10)') as String7
FROM @xml.nodes('/i') as t(v)
如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(
问题内容: 我有一个字符串,我想分成N个相等的部分。 例如,假设我有一个长度为128的字符串,我想将其分成4个长度为32的块;也就是说,第一个32个字符,然后第二个32个字符,依此类推。 我怎样才能做到这一点? 问题答案: import textwrap print textwrap.wrap(“123456789”, 2) #prints [‘12’, ‘34’, ‘56’, ‘78’, ‘9’
我有一个字符串和一个ArrayList。字符串中有几个单词,用空格隔开,例如“firstword second third”。我想将字符串拆分为几个部分,并将“piece”字符串添加到ArrayList中。
问题内容: 有人知道是否有基于固态库的方法来实现以下目的。 说我有琴弦 我想根据逗号分隔符将其解析为2个字符串。 我希望字符串看起来像这样: 有任何想法吗? 问题答案:
给定一个字符串,我们必须将字符串分成所有不同的两部分和三部分(排列不重要)。例如: 答案是 答案是 怎么做?你能提供一个尽可能的时间复杂度的代码吗?
本文向大家介绍将字符串分成组-JavaScript,包括了将字符串分成组-JavaScript的使用技巧和注意事项,需要的朋友参考一下 给定一个字符串S,该字符串由字母,数字和特殊字符组成。 我们需要编写一个程序将字符串拆分为三个不同的字符串S1,S2和S3,这样 字符串S1将包含S中存在的所有字母, 字符串S2将包含S中存在的所有数字,并且 S3将包含S中存在的所有特殊字符 字符串S1,S2和S