[英]split values separated by comma's in different lines
嗨,我正在嘗試從數據庫中檢索值。 我有一行,其中有多個用“,”分隔的圖像名稱。 我想以不同的行顯示它們。 我正在使用下面的代碼,它對於兩個值工作正常。 但是即使我有三個或三個以上的值,它也只會返回兩個。 這是我的查詢:
;with tmp(ImageURL,HeritageId) as
(
select LEFT(ImageURL, CHARINDEX(',',ImageURL+',')-1),
STUFF(ImageURL, 1, CHARINDEX(',',ImageURL+','), '')
from shop.dbo.Images where HeritageId=@HeritageId
union all
select right(ImageURL, CHARINDEX(',',ImageURL+',')-1),
STUFF(ImageURL, 1, CHARINDEX(',',ImageURL+','), '')
from Images
where ImageURL > '' and HeritageId=@HeritageId
)
select ImageURL
from tmp
您的查詢看起來像是嘗試使用遞歸CTE拆分字符串。 就是這種情況,它應該看起來像這樣。
;with tmp(ImageURL,Rest) as
(
select LEFT(ImageURL, CHARINDEX(',',ImageURL+',')-1),
STUFF(ImageURL, 1, CHARINDEX(',',ImageURL+','), '')
from Images where HeritageId=@HeritageId
union all
select LEFT(Rest, CHARINDEX(',',Rest+',')-1),
STUFF(Rest, 1, CHARINDEX(',',Rest+','), '')
from tmp
where Rest > ''
)
select ImageURL
from tmp
在遞歸部分而不是表中使用CTE。
是否有可能/可以將它們作為一個字符串檢索,然后使用Split(',')返回一個字符串數組?
如果您希望使用LINQ-TO-SQL方式,也可以看到此問題。
我建議使用(並標記)@Mikael提出的答案,但是,如果您的序列只有4個值,則可以使用PARSENAME
函數在一個時間段上拆分。
DECLARE @test TABLE
(
[CSVColumn] NVARCHAR(MAX) NOT NULL
)
INSERT INTO @test VALUES ('The PARSENAME function splits on a period.But can only hold.Four.Values - any more and it will return null')
SELECT PARSENAME([CSVColumn], 4) AS 'Col1',
PARSENAME([CSVColumn], 3) AS 'Col2',
PARSENAME([CSVColumn], 2) AS 'Col3',
PARSENAME([CSVColumn], 1) AS 'Col4'
FROM @test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.