Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将源列值合并到一个目标列中_Sql_Sql Server - Fatal编程技术网

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

Sql 将源列值合并到一个目标列中,sql,sql-server,Sql,Sql Server,我有一个源表,其中包含列AreaCodeMobile+MobilePhoneNumber、AreaCodeHome+HomeNumber、AreaCodeOffice+OfficeNumber,我想将它们合并到目标表中的一个电话列中。如何实现这一点?这些列的数据类型是什么?另外,您希望保存在目标列中的格式是什么?如果它们都是int数据类型,则需要使用CAST转换为varchar。例如 DECLARE @AreaCodeMobile int = 833, @MobilePhoneNumber IN

我有一个源表,其中包含列AreaCodeMobile+MobilePhoneNumber、AreaCodeHome+HomeNumber、AreaCodeOffice+OfficeNumber,我想将它们合并到目标表中的一个电话列中。如何实现这一点?

这些列的数据类型是什么?另外,您希望保存在目标列中的格式是什么?如果它们都是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)) 
              )
只需使用CONCAT

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

SELECT t.*, 
 CONCAT(AreaCodeMobile,
    ', '+MobilePhoneNumber, 
    ', '+AreaCodeHome,
    ', '+HomeNumber,
    ', '+AreaCodeOffice, 
    ', '+OfficeNumber) AS [Telephones]
FROM YourTable t;
这里的诀窍是CONCAT将忽略NULL。
但是如果添加NULL,则
+
将导致NULL。
因此,不会为空值添加无用的逗号

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

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;

请提供示例数据和所需结果。@GordonLinoff例如,我有AreaCodeMobeile=833和MobilePhoneNumber=7571256,我有areacodehome=877和homenumber=2968997,我有一个areacodeoffice=247和officenumber=8658734,我想将它们合并到一个名为Telephonenumber的目的地列中,这样最终结果应该包含完整的电话号码和区号。