如何用SQL select语句中的另一个字符串值替换指定的字符串值?

时间:2013-10-09 21:29:40

标签: sql-server-2008 select

我的桌子的电话号码是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。

4 个答案:

答案 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