仅替换SQL中第一个出现的字符串

仅替换SQL中第一个出现的字符串,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我必须更新所有以00开头的电话号码,用“+”前缀替换00。 我必须只替换第一次出现的00,而不替换其他内容 phone_number: 000258843300081 ActualResult: +02588433+081 ExpectedResult: +0258843300081 使用了不正确的查询: 这是正确的查询。只需转换为更新命令! 另外,我使用了一种通用的方法来解决这个问题 SELECT phone_number , STUFF(p

我必须更新所有以00开头的电话号码,用“+”前缀替换00。 我必须只替换第一次出现的00,而不替换其他内容

phone_number:     000258843300081
ActualResult:     +02588433+081
ExpectedResult:   +0258843300081
使用了不正确的查询:


这是正确的查询。只需转换为更新命令! 另外,我使用了一种通用的方法来解决这个问题

    SELECT 
      phone_number
    , STUFF(phone_number, CHARINDEX('00', phone_number), LEN('00'), '+') as ExpectedResult
    FROM dbo.phone 
    WHERE phone_number_numeric LIKE '00%'
REPLACE
函数查看整个字符串。使用
STUFF
函数将范围缩小到所需的限制。

只需使用
STUFF()


为什么参数中的1和2不能像@Gordon Linoff的回答那样?@JamesZ:为了清楚起见,有些人肯定会想知道1和2代表什么。这就解释了@詹姆士-是的!“”应该在代码中避免。
    SELECT 
      phone_number
    , STUFF(phone_number, CHARINDEX('00', phone_number), LEN('00'), '+') as ExpectedResult
    FROM dbo.phone 
    WHERE phone_number_numeric LIKE '00%'
UPDATE [dbo].[phone]
    SET phone_number = STUFF(phone_number, 1, 2, '+')
    WHERE phone_number_numeric LIKE '00%';