Sql server 2008 如何在SQL select语句中用另一个字符串值替换指定的字符串值?
我有一张表,表中的电话号码格式为888.345.ABCD(2223)。在我的选择状态中,我想返回888.345.2223。我可以这样做:Sql server 2008 如何在SQL select语句中用另一个字符串值替换指定的字符串值?,sql-server-2008,select,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的电话号码。对于这两种情况: declare @T table (p
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)')
方法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
你可以试试这样的
select STUFF(LEFT(phone_number, LEN(phone_number)-1),8,6,'.')
from table1
内部左移(删除最后一个)。然后STUFF将其余不需要的字符替换为。假设电话号码的格式不变:
select replace (phone_number, RIGHT(phone_number, 10), SUBSTRING(phone_number, 14, 4))
from table1
如果您的字符串太复杂,位置发生变化,具有不同数量的字符或其他有趣的行为,那么您应该依赖正则表达式…但请确保您需要它,因为它可能会发生在您身上,因为您试图警告其他人使用正则表达式
如果您认为可以使用它,请查看如何创建一个好的函数来进行一些复杂的验证您尝试过使用通配符吗?用四个下划线替换掉ABCD。我没有要验证的测试环境,但它可能会工作。