Sql 如何在串联字符串中捕捉空值句柄?

Sql 如何在串联字符串中捕捉空值句柄?,sql,sql-server,Sql,Sql Server,我有以下观点 c2.title + ' ' + c2.initials + ' ' + c2.surname AS referredTo 现在,如果其中一个值为null,那么referedto就是null。但对于某些记录,标题、首字母或姓氏可能为空。处理这个问题的最佳方法是什么?如果一个或多个值为null,它将只返回具有非null值的字符串。例如,如果title为null,它将只返回“initals姓氏”,如果initals为null,它将返回“title姓氏”,如果两者都为null,它将返回

我有以下观点

c2.title + ' ' + c2.initials + ' ' + c2.surname AS referredTo
现在,如果其中一个值为null,那么referedto就是null。但对于某些记录,标题、首字母或姓氏可能为空。处理这个问题的最佳方法是什么?如果一个或多个值为null,它将只返回具有非null值的字符串。例如,如果title为null,它将只返回“initals姓氏”,如果initals为null,它将返回“title姓氏”,如果两者都为null,它将返回“姓氏”,等等,以覆盖任何为null的值。这可能是一个非常简单的答案,但我对SQL有点陌生,必须边学边用

谢谢

SET @FinalAnswer= ISNULL(@Col1, '') + ' ' +ISNULL(@Col2, '')
尝试上述方法。

使用


也许您可以使用ISNULL,请检查以下语句

RTRIM(
    LTRIM(
      ISNULL(c2.title,    '') + ' ' +
      ISNULL(c2.initials, '') + ' ' +
      ISNULL(c2.surname,  '')
    )
) AS referredTo

按照注释中的建议,在
ISNULL
中添加空格:

SELECT ISNULL(Title + ' ', '') + ISNULL(Initials + ' ','') + ISNULL(Surname,'')
FROM YourTable;

这意味着,如果首字母的值为
NULL

,则不会在前面出现空格,或者(可能)在标题和姓氏之间出现两个空格,而是
COALESCE()
,这是ANSI SQL。尝试
COALESCE(…)
这样会是类似于ISNULL(c2.Title)、+''+ISNULL(c2.Initials),)+ISNULL(c2.Initials),)+ISNULL(c2.姓氏),)? 如果某些值为null,这会不会留下不必要的空格?@ailinmcc666不,您可以使用不起作用的L/RTRIM。这意味着对于一个叫做“约翰·史密斯先生”的东西,返回的结果将是“先生”。我将使用这个。它解决了这个问题,也消除了中间的额外空间。是的,如果姓氏为null,它会在结尾留下一个空格,但这不是一个真正的问题,结尾的空格不会被注意到。谢谢你的回答,这很好,但我选择了Larnu的答案,因为姓氏在DB中不可为null(对不起,应该指定),所以结尾的空格不会是一个问题,所以拉努的回答更简洁地完成了我想要的任务。但我很感激你的回答。
SELECT ISNULL(Title + ' ', '') + ISNULL(Initials + ' ','') + ISNULL(Surname,'')
FROM YourTable;