我有一个电话号码格式为 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 这样的电话号码。
我有一个电话号码格式为 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 这样的电话号码。
对于两种给定的情况:
declare @T table (phone_number varchar(50))
insert into @T values ('888.345.YYYY(2223)'),('888.345.XXXX (2223)')
方法一:
使用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
如果您的字符串太复杂、位置变化、具有不同数量的字符或其他有趣的行为,那么您应该依赖正则表达式......但请确保您需要它,因为它可能会发生在您试图警告的该用户身上其他人使用正则表达式。
如果您认为可以使用它,请查看如何创建一个好的函数来进行一些复杂的验证TSQL 正则表达式工作台
你可以试试这样的
select STUFF(LEFT(phone_number, LEN(phone_number)-1),8,6,'.')
from table1
内部 LEFT 删除最后一个 )。然后 STUFF 将其余不需要的字符替换为 .
假设电话号码的格式没有改变:
select replace (phone_number, RIGHT(phone_number, 10), SUBSTRING(phone_number, 14, 4))
from table1