3个字段:FirstName,MiddleName,LastName
任何字段都可以为null,但我不想要额外的空格.格式应为"First Middle Last","First Last","Last"等.
LTRIM(RTRIM( LTRIM(RTRIM(ISNULL(FirstName, ''))) + ' ' + LTRIM(RTRIM(ISNULL(MiddleName, ''))) + ' ' + LTRIM(ISNULL(LastName, '')) ))
注意:这不会留下尾随或前导空格.这就是为什么它比其他解决方案有点丑陋.
假设"额外空格",你的意思是在连接期间插入额外的空格(这是一个合理的假设,我认为.如果你的数据中有额外的空格,你应该清理它):
ISNULL(FirstName + ' ', '') + ISNULL(MiddleName + ' ', '') + ISNULL(LastName, '')
因为你将为名称添加一个空格 - 如果它是NULL,则产生NULL - 产生空字符串.
编辑:如果您不计算SET OPTION - 可以是连接或db选项:
SET CONCAT_NULL_YIELDS_NULL OFF LTRIM(FirstName + ' ' + NULLIF(MiddleName + ' ', ' ') + LastName)
有点短,但有点丑陋.
编辑2:既然你接受了UDF的答案 - 国际海事组织,这有点作弊 - 这里有一些相同的情况:
SELECT a FROM b
b是一个视图.;) 要么.存储过程,
EXEC c
但是,由于EXEC是可选的:
c