将源列值合并到一个目标列中

时间:2019-12-04 18:24:01

标签: sql sql-server

我有一个源表,其中包含AreaCodeMobile + MobilePhoneNumber,AreaCodeHome + HomeNumber,AreaCodeOffice + OfficeNumber列,我想将它们合并到目标表中的一个电话列中。我该怎么办?

2 个答案:

答案 0 :(得分:0)

这些列的数据类型是什么?另外,您要保存在目标列中的任何格式吗?如果它们都是int数据类型,则需要使用CAST转换为varchar。例如

DECLARE @AreaCodeMobile int = 833, @MobilePhoneNumber INT = 7571256
DECLARE @areacodehome INT =  877, @homenumber INT =  2968997
DECLARE @areacodeoffice INT =  247 , @officenumber INT =  8658734

select CONCAT (
        'Mobile Phone Number: ' , cast(@areacodemobile as varchar(50)) , cast(@MobilePhoneNumber as varchar(50)) 
        ,' Home Number: ', CAST(@areacodehome as varchar(50)) , cast(@homenumber as varchar(50)) 
        ,' Office Number: ', CAST(@areacodeoffice as varchar(50)) , cast(@officenumber as varchar(50)) 
              )

答案 1 :(得分:0)

只需使用CONCAT。

并使用+前缀逗号或您喜欢的任何分隔符。

SELECT t.*, 
 CONCAT(AreaCodeMobile,
    ', '+MobilePhoneNumber, 
    ', '+AreaCodeHome,
    ', '+HomeNumber,
    ', '+AreaCodeOffice, 
    ', '+OfficeNumber) AS [Telephones]
FROM YourTable t;

这里的窍门是CONCAT将忽略NULL。
但是,如果添加NULL,则+将导致NULL。
因此,没有为空值添加无用的逗号。

或者,如果您的Sql Server版本支持,也可以使用CONCAT_WS

SELECT t.*, 
 CONCAT_WS(', ', AreaCodeMobile, MobilePhoneNumber, AreaCodeHome, HomeNumber, AreaCodeOffice, OfficeNumber) AS [Telephones]
FROM YourTable t;

因此,要更新表中的该列,也许是这样的:

UPDATE YourTable
SET Telephones = CONCAT_WS(', ', AreaCodeMobile, MobilePhoneNumber, AreaCodeHome, HomeNumber, AreaCodeOffice, OfficeNumber)
WHERE Telephones IS NULL;