我的桌子的电话号码是888.345.ABCD(2223)。在我的选择声明中,我想返回888.345.2223。我可以这样做:
select replace (phone_number, 'ABCD(2223)', '2223')
from table1
但我可以有不同的电话号码,如888.345.EDED(3333)或888.345.EDED(3333)。我该如何编写查询?
更新:但我的电话号码可能是888.123.4567。
答案 0 :(得分:1)
对于两种情况:
declare @T table (phone_number varchar(50))
insert into @T values ('888.345.YYYY(2223)'),('888.345.XXXX (2223)')
方法1:
使用LEFT()
和RIGHT()
函数:
SELECT LEFT(phone_number,8) + LEFT(RIGHT(phone_number,5),4)
FROM @T
方法2:
使用STUFF()
,SUBSTRING()
和CHARINDEX()
函数。
SELECT STUFF(phone_number,9,LEN(phone_number)-8,
SUBSTRING(phone_number, CHARINDEX('(',phone_number)+1,4))
From @T
--Results
888.345.2223
888.345.2223
答案 1 :(得分:1)
如果你的字符串过于复杂,改变了地方,有不同数量的字符或其他有趣的行为,那么你应该依赖正则表达式......但请确保你需要它,因为它可能会发生在{{3试图警告其他人使用正则表达式。
如果您认为可以使用它,请查看如何创建一个好的函数来进行复杂的验证this user
答案 2 :(得分:0)
您可以尝试这样的事情
select STUFF(LEFT(phone_number, LEN(phone_number)-1),8,6,'.')
from table1
内部LEFT删除最后一个)。然后STUFF用。替换剩下的不需要的字符。
答案 3 :(得分:0)
假设电话号码的格式没有改变:
select replace (phone_number, RIGHT(phone_number, 10), SUBSTRING(phone_number, 14, 4))
from table1