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