Sql server 基于列长度的字符串连接

Sql server 基于列长度的字符串连接,sql-server,sql-server-2008,sql-server-2016,Sql Server,Sql Server 2008,Sql Server 2016,我在一张桌子上有这样的电话号码: ID Telephone extention ------------------------------ 1 9986323422 4 2 9992108 2222 3 9962718 241 需要的最终结果是将取扩展中的位数,并替换“电话”列的结束位数/(s) 希望我的结果是: ID Telephone extention r

我在一张桌子上有这样的电话号码:

 ID   Telephone     extention
------------------------------
1    9986323422     4            
2    9992108        2222         
3    9962718        241
需要的最终结果是将取扩展中的位数,并替换“电话”列的结束位数/(s)

希望我的结果是:

   ID   Telephone     extention   result
-----------------------------------------
1    9986323422     4           9986323424 
2    9992108        2222        9992222 
3    9962718        241         9962241 
我有10万张这样的唱片。实现这一目标的最佳快速方法是什么?谢谢。

您可以使用
STUFF()
LEN()进行一些计算。


您可能需要添加一些验证以避免错误(例如,分机的长度应小于电话号码的长度)

以类似的方式使用
reverse()
函数和
stuff()
函数将电话值的末端数字替换为分机值

select *, reverse(stuff(reverse(Telephone), 1, len(extention), reverse(extention))) 
from table

这可能有点过分1,但它是
方法的替代方法:

SELECT ID,Telephone,Extension,
   SUBSTRING(Telephone,1-LEN(Extension),LEN(Telephone)) + Extension as Result
它之所以有效,是因为的start参数的负参数允许您将字符串结尾截断这些数量



1它可以避免重复调用
LEN()
,但优化器无论如何都应该能够避免重复,并避免必须反转整个字符串,但这确实会带来可读性成本。

电话和分机列的数据类型是什么。?
SELECT ID,Telephone,Extension,
   SUBSTRING(Telephone,1-LEN(Extension),LEN(Telephone)) + Extension as Result