2013-12-20 89 views
1

我有一个字符串,看起来像BAT | CAT | RAT | MAT我想将这个字符串拆分成4个部分,然后存储在4个不同的变量中,分别是.. @ a,@ b,@ c,@ d。 我在代码背后这样做,但我不知道如何在SQL中做到这一点? 谢谢。如何将字符串拆分为sql中的变量?

+0

使用CHARINDEX,看这里:http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-对列 –

+0

是有帮助的,http://stackoverflow.com/questions/2647/split-string-in-sql – KumarHarsh

+0

由于你面临的问题 这个线程可能会帮助你http://stackoverflow.com/questions/6953115 /将一个字符串分成两部分并选择成两个变量 –

回答

5

周边的一个字符分割:

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 

SQL Server 2005 : split string into array and get array(x)?

解决方法分割字符串:

http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings

+0

ParseName是标准的聪明答案,但它实际上并不是一个非常好的答案,因为它期望的是'sysname'数据类型。只要做正常的字符串切碎。 – ErikE

+0

@ErikE能否请您详细说明为什么应该避免使用'ParseName',因为这对我来说似乎是非常诱人的一段代码。 – Arbaaz

+0

好吧,我刚刚意识到,人们可以拆分只有4个参数,如果有第五个,它会简单地返回null。我错了吗? – Arbaaz

5

您可以分割的值,并在表变量插入它们,然后将它们分配给您的变量是这样的:

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 

结果,如果这个查询:

enter image description here

注意,这技术是动态的 - 它将分割任何以|分割的字符串数并将它们存储在表变量表中。

+0

有没有更简单的方法?我有一个函数负责分割一长串参数,但我在寻找一些简单的方法来分割一个字符串,当有多个参数已知时。 \ – Arbaaz

+0

这是一种众所周知的分割字符串的技巧,很简单。如果你有一个实现这个方法的函数,你可以在任何需要的地方使用它。 – gotqn

1

不错,简单。 (使用Microsoft SQL Server Management Studio中PATINDEX)

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 
相关问题