Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在SQL select语句中用另一个字符串值替换指定的字符串值?_Sql Server 2008_Select - Fatal编程技术网

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

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

我有一张表,表中的电话号码格式为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)')
方法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。我没有要验证的测试环境,但它可能会工作。