我在一张桌子上有这样的电话号码:
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
我有100k这样的记录。实现这一目标的最佳和快捷方式是什么?感谢。
答案 0 :(得分:1)
这可能有点太可爱 1 但是STUFF
方法的替代方案:
SELECT ID,Telephone,Extension,
SUBSTRING(Telephone,1-LEN(Extension),LEN(Telephone)) + Extension as Result
它的工作原理是因为SUBSTRING
的 start 参数的负参数允许您按字符串截断字符串的结尾。
1 它避免重复调用LEN()
,但优化器应该能够避免重复并避免必须反转整个字符串,但这确实是以可读性为代价的。
答案 1 :(得分:0)
您可以将STUFF()
与LEN()
DECLARE @dummyTable TABLE(ID INT,Telephone VARCHAR(100), extention VARCHAR(100));
INSERT INTO @dummyTable VALUES
(1,'9986323422','4')
,(2,'9992108','2222')
,(3,'9962718','241');
SELECT *
,STUFF(t.Telephone,LEN(t.Telephone)-LEN(t.extention)+1,LEN(t.extention),t.extention) AS result
FROM @dummyTable AS t;
您可能需要添加一些验证以避免错误(例如,扩展的长度应小于电话号码)
答案 2 :(得分:0)
以类似的方式使用reverse()
函数和stuff()
函数将电话值的结束数字替换为扩展值
select *, reverse(stuff(reverse(Telephone), 1, len(extention), reverse(extention)))
from table