2017-07-07 34 views
0
DECLARE @mockup TABLE(Column1 VARCHAR(1),Column2 VARCHAR(1)); 
INSERT INTO @mockup VALUES('1','2'),('-','2'),('1','2'),('-','-'),('2','-'),('1','2'); 

SELECT ISNULL(NULLIF(Column1 + '|','-|'),'') 
     +ISNULL(NULLIF(Column2,'-'),'') 
FROM @mockup 

上面的查詢結果如下,獲取2列的值作爲以'|'分隔的單個值

1|2 
2 
1|2 
2| 
1|2 

我想要的結果如上處僅在於ROW4,其中2 |應該只有2。 '|'不應該存在於值的前後。

回答

0

只要加入這兩個領域和用途REPLACE刪除|--|。條件WHERE條款避免了在這兩個領域都-記錄:

select replace(replace(Column1+'|'+Column2,'-|',''),'|-','') as Result 
from mockup 
where coalesce(nullif(Column1,'-'),nullif(Column2,'-')) is not null 

輸出:

Result 
1|2 
2 
1|2 
2 
1|2 

參見導致here

0

使用Replace功能

SELECT replace(replace(replace(Column1 + '|' + Column2,'-|',''),'|-',''),'-','') 
FROM @mockup 

,或者嘗試使用CASE聲明

SELECT CASE 
     WHEN column1 LIKE '[0-9]' AND column2 LIKE '[0-9]' THEN column1 + '|' + column1 
     WHEN column1 LIKE '[0-9]' AND column2 NOT LIKE '[0-9]' THEN column1 
     ELSE column2 
     END 
FROM @mockup 

,如果你想檢查-不是數字的則

SELECT CASE 
     WHEN column1 NOT LIKE '-' AND column2 NOT LIKE '-' THEN column1 + '|' + column1 
     WHEN column1 NOT LIKE '-' AND column2 LIKE '-' THEN column1 
     ELSE column2 
     END 
FROM @mockup 
0

我會做這樣的:

select stuff(((case when column1 not like '-' then '|' + column1 else '' end) + 
       (case when column2 not like '-' then '|' + column2 else '' end) 
      ), 1, 1, ''); 

這是我發現在SQL Server實現concat_ws()最簡單的方法。 concat_ws()是在其他數據庫中可用的功能,您只需執行以下操作:

select concat_ws('|', 
       (case when column1 not like '-' then column1 end), 
       (case when column2 not like '-' then column2 end)     
       ) 
相關問題