合并两列';在SQL中将数据合并到一列中?
我正在尝试将姓氏、名和中间名合并到SQL语句中的单个排序名列中。有时中间名将是合并两列';在SQL中将数据合并到一列中?,sql,sql-server,Sql,Sql Server,我正在尝试将姓氏、名和中间名合并到SQL语句中的单个排序名列中。有时中间名将是NULL,如果是这种情况,排序名将显示NULL 如何处理 SELECT TOP 500 Last_Name, First_Name, Middle_Name, [Last_Name] + ',' + [First_Name] + ' ' + [Middle_Name] AS SORT_NAME FROM [dbo].[usr_CUSTOMER] ORDER BY SORT_NAME 结果: Last_Name
NULL
,如果是这种情况,排序名将显示NULL
如何处理
SELECT TOP 500
Last_Name, First_Name, Middle_Name,
[Last_Name] + ',' + [First_Name] + ' ' + [Middle_Name] AS SORT_NAME
FROM [dbo].[usr_CUSTOMER]
ORDER BY SORT_NAME
结果:
Last_Name First_Name MiddleName Sort_Name
Aa Robert NULL NULL
但是我想看到排序名是'Aa,Robert'
:
当然,当姓氏或first和middle都为空时,这将留下难看的逗号,因此您的实际代码需要更聪明一些。注意,我在COALESCE中移动了分隔first和middle name的空格,以便在middle name为NULL时避免出现尾随空格
..., [Last_Name]+ ','+ [First_Name] + COALESCE(' '+ [Middle_Name],'') as SORT_NAME...
使用ISNULL()
函数-它将NULL
值替换为您定义的值:
SELECT TOP 500
Last_Name, First_Name, Middle_Name,
[Last_Name] + ',' + [First_Name] + ' ' + ISNULL([Middle_Name], '') as SORT_NAME
FROM [dbo].[usr_CUSTOMER]
ORDER BY SORT_NAME
您可以使用ISNULL函数
ISNULL ( check_expression , replacement_value )
文档:试试看
CONCAT(firstname,' ', LastName,' ', MiddleName) AS Full_Name
当然,如果您只是将逗号作为
coalesce
的一部分,您就不会有这个问题。例如COALESCE([Last_Name]+',','')
true,但前提是假设中间名是唯一可选字段。如果你可以有第一名但没有中间名,或者中间名但没有第一名,那就更难了。OP知道他的数据规则,所以我把它留给了他。但是你的观点很有帮助,我应该包括在内。谢谢。添加更多细节并解释答案。
CONCAT(firstname,' ', LastName,' ', MiddleName) AS Full_Name