这是我的SQL子句
comment1
如果列中没有值,那么我只得到一个分号。如果该值不在;xyz
中,那么我将获得comment1
。
我想要那个:
comment2
和note1 = ''
以及comment1
comment2
中没有值,但xyz
中有值{{1}} 答案 0 :(得分: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;
答案 1 :(得分:2)
当数据为两列时,这将添加分号
SELECT
COALESCE(LTRIM(RTRIM(comment1)),'') +
CASE WHEN NULLIF(comment1, '') + NULLIF(comment2, '')IS NULL THEN '' ELSE ';' END +
COALESCE(LTRIM(RTRIM(comment2)),'')
FROM yourtable
答案 2 :(得分:0)
如果其中一个为空,则使用空格,否则为“;”。如果其中任何一个为null,则coalesce将返回NULL
,否则返回'null'
LTRIM(RTRIM(Masters.comment1))
+ CASE WHEN (coalesce(@a + @b, 'eithernull')) = 'eithernull' THEN '' ELSE ';' END
+ LTRIM(RTRIM(masters.comment2))