如何在sql中将字符串拆分为变量?
我有一个字符串,看起来像如何在sql中将字符串拆分为变量?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个字符串,看起来像BAT | CAT | RAT | MAT我想把这个字符串分成4部分,然后将它们存储到4个不同的变量中,比如@a、 分别为@b、@c和@d 如何在sql中实现这一点 用于围绕字符进行拆分: DECLARE @A VARCHAR (100)= 'cat | bat | sat' SELECT items INTO #STRINGS FROM dbo.split(@A,'|') 另请参见此链接 DECLARE @test varchar(max); set @test
BAT | CAT | RAT | MAT
我想把这个字符串分成4部分,然后将它们存储到4个不同的变量中,比如@a、 分别为@b、@c和@d
如何在sql中实现这一点 用于围绕字符进行拆分:
DECLARE @A VARCHAR (100)= 'cat | bat | sat'
SELECT items
INTO #STRINGS
FROM dbo.split(@A,'|')
另请参见此链接
DECLARE @test varchar(max);
set @test = 'Peter/Parker/Spiderman/Marvel';
set @test = Replace(@test, '/', '.');
SELECT ParseName(@test, 4) --returns Peter
SELECT ParseName(@test, 3) --returns Parker
SELECT ParseName(@test, 2) --returns Spiderman
SELECT ParseName(@test, 1) --returns Marvel
拆分字符串的变通方法:
您可以拆分值并将其插入表变量中,然后将其分配给变量,如下所示:
DECLARE @DataSource TABLE
(
[ID] TINYINT IDENTITY(1,1)
,[Value] NVARCHAR(128)
)
DECLARE @Value NVARCHAR(MAX) = 'BAT | CAT | RAT | MAT'
DECLARE @XML xml = N'<r><![CDATA[' + REPLACE(@Value, '|', ']]></r><r><![CDATA[') + ']]></r>'
INSERT INTO @DataSource ([Value])
SELECT RTRIM(LTRIM(T.c.value('.', 'NVARCHAR(128)')))
FROM @xml.nodes('//r') T(c)
SELECT [ID]
,[Value]
FROM @DataSource
DECLARE@DataSource表
(
[ID]TINYINT标识(1,1)
,[Value]NVARCHAR(128)
)
声明@Value NVARCHAR(MAX)='BAT | CAT | RAT | MAT'
声明@XML=N“”
插入到@DataSource([Value])
选择RTRIM(LTRIM(T.c.值('.',NVARCHAR(128)))
来自@xml.nodes('//r')T(c)
选择[ID]
,[价值]
来自@DataSource
如果此查询为:
注意,这种技术是动态的-它将拆分使用|
拆分的任何字符串计数,并将它们存储在表变量表中。非常简单。
(在Microsoft SQL Server Management Studio中使用PATINDEX。)
使用CHARINDEX,看这里:这是否有用,因为您面临的问题此线程可能会帮助您解析名称是标准的聪明答案,但它实际上不是一个很好的答案,因为它需要
sysname
数据类型。就做普通的字符串切碎。@ErikE你能详细解释一下为什么要避免使用ParseName
,因为这段代码对我来说似乎很有吸引力。好吧,我刚刚意识到,一个人只能拆分4个参数,如果有第5个参数,它只会返回null。我错了吗?事实上,你是对的,请访问链接了解更多信息。如果你想使用句点怎么办?如果希望字符串长度超过255个字符,该怎么办?你看过ParseName的代码了吗?如果我没记错的话,它非常难看。滥用系统功能让我心惊肉跳。这似乎是个坏主意。如果你只有3个代币而不是4个代币,并且要4个代币怎么办?有没有更简单的方法?我有一个函数,它负责分割一长串参数,但我一直在寻找一些简单的方法来分割一个已知参数数的字符串\这是一种众所周知的分割字符串的技术,而且非常简单。如果您有一个实现此方法的函数,您可以在任何需要的地方使用它。
DECLARE @string varchar(25) = 'BAT | CAT | RAT | MAT'
DECLARE @one varchar(5) = null
DECLARE @two varchar(5) = null
DECLARE @three varchar(5) = null
DECLARE @four varchar(5) = null
BEGIN
SET @one = SUBSTRING(@string, 0, PATINDEX('%|%', @string))
SET @string = SUBSTRING(@string, LEN(@one + '|') + 1, LEN(@string))
SET @two = SUBSTRING(@string, 0, PATINDEX('%|%', @string))
SET @string = SUBSTRING(@string, LEN(@two + '|') + 1, LEN(@string))
SET @three = SUBSTRING(@string, 0, PATINDEX('%|%', @string))
SET @string = SUBSTRING(@string, LEN(@three + '|') + 1, LEN(@string))
SET @four = @string
SELECT @one AS Part_One, @two AS Part_Two, @three AS Part_Three, @four AS Part_Four
END