簡體   English   中英

逗號分隔的列值

[英]comma separated column values

我需要從3列中獲取值並將它們分組為1列,以逗號分隔:

2014-01-01,2014-01-29

問題是一個或多個列可以為NULL,因此將這樣的逗號弄亂了:

2014-01-01,,2014-01-29

這就是我的編碼方式(case語句基本上是逗號,如果它是字符串中的最后一個字符的話)。

我需要添加一些邏輯,以便它考慮到NULL,但是我很難解決這個問題。

CASE WHEN RIGHT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, 1) = ',' 
     THEN LEFT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, LEN(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate) - 1)
     ELSE ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate
END AS AlLGapDatesFormatted

編輯-

我需要對突出顯示的內容進行分組(注意,PayrollGapDate為“”):

這就是我得到的:

這是我實現的代碼:

嘗試使用此技術:

SET CONCAT_NULL_YIELDS_NULL ON  --<<<make sure concatenations with NULL result in NULL

DECLARE @C1 varchar(10)='AAA'
       ,@C2 varchar(10)='BBB'
       ,@C3 varchar(10)=null
       ,@C4 varchar(10)='DDD'

SELECT  STUFF(    ISNULL(', '+@C1,'')
                 +ISNULL(', '+@C2,'')
                 +ISNULL(', '+@C3,'')
                 +ISNULL(', '+@C4,'')

                 ,1,2,''
             )

輸出:

-----------------------------------------------
AAA, BBB, DDD

(1 row(s) affected)

您讓', '+@C3產生NULL, ISNULL(***,'')將其轉換為空字符串。 STUFF(***,1,2,'')刪除前導逗號和空格。

嘗試:

SELECT  STUFF(    ISNULL(', '+d.FirstGapDate,'')
                 +ISNULL(', '+d.PayrollGapDate,'')
                 +ISNULL(', '+d.LastGapDate,'')

                 ,1,2,''
             )
    FROM ...
    WHERE...

您可以在表達式上方應用類似這樣的內容,以一個逗號替換許多逗號:

declare @s varchar(100) = 'ABC,,,,DEF'

select replace(replace(replace(@s, ',', '[]'), '][', ''), '[]', ',')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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