SQL Server多变量修剪拼接插入单列代码排查请求
解决SQL Server中修剪变量值并拼接插入同一列的问题
嘿,刚看到你把MySQL的脚本转到SQL Server时遇到了问题,我帮你梳理下两者的差异,然后给出可行的方案~
首先先纠正下你原来MySQL脚本里的小问题:你在CONCAT内部给每个trim后的字段加AS是多余的,AS是用来给列或别名命名的,并不需要放在拼接函数里。
接下来看SQL Server的实现方式,分两种场景适配不同版本:
情况1:SQL Server 2017及以上版本(支持TRIM()函数)
SQL Server 2017开始支持TRIM()函数,能同时去掉字符串两端的空格,比LTRIM(RTRIM())更简洁。而且用CONCAT()函数的核心好处是自动处理NULL值——如果某个字段是NULL,它会直接当成空字符串处理,不会让整个拼接结果变成NULL:
-- 查询拼接结果 SELECT CONCAT( TRIM(HomeAdd1), ' ', TRIM(HomeAdd2), ' ', TRIM(HomeAdd3), ' ', TRIM(HomeAdd4), ' ', TRIM(HomeAdd5) ) AS FullHomeAddress FROM YourTableName; -- 插入/更新到目标列 UPDATE YourTableName SET FullAddress = CONCAT( TRIM(HomeAdd1), ' ', TRIM(HomeAdd2), ' ', TRIM(HomeAdd3), ' ', TRIM(HomeAdd4), ' ', TRIM(HomeAdd5) );
情况2:SQL Server 2016及以下版本(不支持TRIM())
旧版本没有TRIM()函数,只能用LTRIM(RTRIM())组合来去掉字符串两端的空格。同样推荐用CONCAT()来避免NULL值导致的拼接失败:
-- 查询拼接结果 SELECT CONCAT( LTRIM(RTRIM(HomeAdd1)), ' ', LTRIM(RTRIM(HomeAdd2)), ' ', LTRIM(RTRIM(HomeAdd3)), ' ', LTRIM(RTRIM(HomeAdd4)), ' ', LTRIM(RTRIM(HomeAdd5)) ) AS FullHomeAddress FROM YourTableName;
避坑提醒:别随便用+拼接
如果你习惯用+来拼接字符串,一定要注意NULL值的陷阱——只要拼接的字段中有一个是NULL,整个结果就会变成NULL。如果必须用+,得用ISNULL()把NULL转成空字符串:
SELECT ISNULL(LTRIM(RTRIM(HomeAdd1)), '') + ' ' + ISNULL(LTRIM(RTRIM(HomeAdd2)), '') + ' ' + ISNULL(LTRIM(RTRIM(HomeAdd3)), '') + ' ' + ISNULL(LTRIM(RTRIM(HomeAdd4)), '') + ' ' + ISNULL(LTRIM(RTRIM(HomeAdd5)), '') AS FullHomeAddress FROM YourTableName;
这种写法比CONCAT()繁琐很多,所以优先推荐用CONCAT()函数处理哦~
内容的提问来源于stack exchange,提问作者Vince Osana
相关产品推荐
相关产品推荐

