簡體   English   中英

用逗號分隔不同行中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM