您可以使用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;
不知道NULLIF('','')'='NULL'。谢谢! –
如果你比较'ab'='ab',它们也是相等的。不使用LIKE虽然'ab'是'假' –