2013-12-20 90 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 
相關問題