2016-03-02 71 views
0

之間的可選的分號,這是我的SQL子句插入兩個選擇的領域

ISNULL((LTRIM(RTRIM(Masters.comment1))+';'+LTRIM(RTRIM(masters.comment2))),'')Note1 , 

當有兩列沒有價值,那麼我只得到了一個分號。如果該值不在comment1那麼我得到;xyz

我想的是:

  • 時,沒有值是comment1comment2然後note1 = ''
  • comment1沒有價值但在comment2一個值,那麼xyz

回答

2

這將增加有數據時的分號是列

SELECT 
    COALESCE(LTRIM(RTRIM(comment1)),'') + 
    CASE WHEN NULLIF(comment1, '') + NULLIF(comment2, '')IS NULL THEN '' ELSE ';' END + 
    COALESCE(LTRIM(RTRIM(comment2)),'') 
FROM yourtable 
+0

不知道NULLIF('','')'='NULL'。謝謝! –

+0

如果你比較'ab'='ab',它們也是相等的。不使用LIKE雖然'ab'是'假' –

4

您可以使用NULLIF將空字符串變爲NULL。然後連接NULL與';'仍然是NULL,並且可以變成空字符串ISNULL

WITH masters (comment1, comment2) AS (
    SELECT NULL, NULL UNION ALL 
    SELECT ' 1', NULL UNION ALL 
    SELECT NULL, '2 ' UNION ALL 
    SELECT '3 ', ' 4' UNION ALL 
    SELECT '' , '' UNION ALL 
    SELECT ' 5', '' UNION ALL 
    SELECT '' , '6 ' UNION ALL 
    SELECT '7 ', ' 8' 
) 
SELECT 
    ISNULL(
     (
      ISNULL(NULLIF(LTRIM(RTRIM(masters.comment1)), '') + ';', '') 
      + NULLIF(LTRIM(RTRIM(masters.comment2)), '') 
     ) 
     , ISNULL(LTRIM(RTRIM(masters.comment1)), '')) Note1 
FROM masters; 

更新Jorge Campos有一個很好的,很容易使用CASE閱讀解決方案:

WITH masters (comment1, comment2) AS (
    SELECT NULL, NULL UNION ALL 
    SELECT ' 1', NULL UNION ALL 
    SELECT NULL, '2 ' UNION ALL 
    SELECT '3 ', ' 4' UNION ALL 
    SELECT '' , '' UNION ALL 
    SELECT ' 5', '' UNION ALL 
    SELECT '' , '6 ' UNION ALL 
    SELECT '7 ', ' 8' 
) 
SELECT  ISNULL(LTRIM(RTRIM(masters.comment1)), '') + 

    CASE WHEN ISNULL(LTRIM(RTRIM(masters.comment1)), '') <> '' 
      AND ISNULL(LTRIM(RTRIM(masters.comment2)), '') <> '' 
     THEN ';' 
     ELSE '' 
    END + 
       ISNULL(LTRIM(RTRIM(masters.comment2)),'') AS Note1 
FROM masters; 
0

如果eit她是空的使用空格,否則';'。如果其中任何一個爲空,則合併將返回NULL否則'ornull'

LTRIM(RTRIM(Masters.comment1)) 
+ CASE WHEN (coalesce(@a + @b, 'eithernull')) = 'eithernull' THEN '' ELSE ';' END 
+ LTRIM(RTRIM(masters.comment2)) 
+1

當'comment1','comment2'爲'NULL'且仍然添加';'時,這會產生'NULL'如果'comment1'或'comment2'爲空而不是'NULL'。 –

+0

@ Y.B。 OP沒有提及它們中的任何一個都是空的,所以我沒有涉及這種情況。 – artm

+0

@ Y.B。我曾經假設OP意味着NULL,但是再次閱讀這個問題,你可能是正確的,他指的是空字符串。 – artm