2016-03-02 96 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