连接两列,其中一列包含空值

时间:2016-10-19 08:02:29

标签: sql-server

我在SQL 2012上有一个视图,我试图连接2个nvarchar列。如果其中一个值为null,则返回null。

我试过了concat函数,我试过{ "data": null, "service": null, "status": { "code": 1, "description": "An error occurs while processing your request, Please try later or contact our sales department", "status": "success" } } 我曾尝试使用isnull(列名)但仍然返回空值

这是我的问题:

SET CONCAT_NULL_YIELDS_NULL OFF

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用CONCAT

CONCAT[Document Number],[Dunning Block])

CONCAT忽略空值

  

CONCAT采用可变数量的字符串参数并将它们连接成一个字符串。它至少需要两个输入值;否则,会引发错误。所有参数都隐式转换为字符串类型,然后连接。空值隐式转换为空strin

答案 1 :(得分:0)

SET CONCAT_NULL_YIELDS_NULL OFF只能用于连接值和NULL-如果所有值都为NULL,您仍然会得到NULL。我怀疑两列都有NULL值,尽管你的问题标题 - 如果你刚刚检查了数据,你的任何方法都可能有用。

ISNULL应该适合您的情况,但请确保您在可以为空的两个列上执行此操作:

SELECT TOP (100) PERCENT Assignment,
                         ISNULL([Document Number],'') + ISNULL([Dunning Block], '') AS [Document Number],
                         [Document Type],
                         [Document Date],
                         [Special G/L Indicator],
                         [Amount in local currency],
                         [Local Currency],
                         [Clearing Document],
                         Text,
                         Account,
                         Reference,
                         [Dunning block],
                         [Invoice reference],
                         SUBSTRING(strDoc_Date, 1, 4) AS Year,
                         CASE
                           WHEN SUBSTRING(strDoc_Date, 1, 4) = '2013' THEN
                             CASE
                               WHEN SUBSTRING(strDoc_Date, 6, 2) = '01' THEN
                                 CASE
                                   WHEN CAST(SUBSTRING(strDoc_Date, 9, 2) AS INTEGER) > 25 THEN '02'
                                   ELSE SUBSTRING(strDoc_Date, 6, 2)
                                 END
                               ELSE SUBSTRING(strDoc_Date, 6, 2)
                             END
                           ELSE SUBSTRING(strDoc_Date, 6, 2)
                         END AS Period,
                         SUBSTRING(strDoc_Date, 9, 2) AS Day
FROM   dbo.Zcustage

另外,在这里使用TOP 100 PERCENT是一个无操作 - 它什么都不做。

答案 2 :(得分:0)

你需要ISNULL

ISNULL(YourNullableField,'')