如何仅更改匹配条件的值的开头?

How to change only the beginning of value that matches condition?

我有来自特定 table 的记录,其中包含以下字段:phone1phone2 .

如何将这些字段中 057 的值更改为 053,但只有值的开头?

例如: 057-4353009应该改为053-4353009,但是057-5405731应该改为053-5405731此特定数字中的第二个 057 不应更改)。

您可以使用 REPLACE :

UPDATE tbl
SET phone = REPLACE(phone, '057-', '053-')

SQLFiddle

编辑:如果您不确定数字是否具有带分隔符的结构,如 xxx–xxxxxxx:

UPDATE tbl 
SET phone = '053' + SUBSTRING(phone, 4 , LEN(phone) - 1)
WHERE LEFT(phone, 3) = '057';

SQLFiddle

也试试这个(对我有用):

UPDATE       table1
SET                phone = table2.leftc + table2.rightc
FROM            table1 INNER JOIN
                     (select  '053' as leftc, RIGHT(phone ,Len(phone) - 3)as rightc, phone 
                        from table1
                        where  LEFT(phone, 3) = '057') AS table2 ON table1.phone = table2.phone

Working Demo Here

您必须实现两个部分:

  1. 正在检查 phone 号码是否以特定序列开头 (WHERE phone LIKE '057%')
  2. 获得 057 之后的部分并且 与新的连接 ('053' + RIGHT(phone, LEN(phone) - 3))

这是执行此操作的示例查询:

UPDATE
  tbl
SET
  phone = '053' + RIGHT(phone, LEN(phone) - 3) -- Leaving the first 3 characters and use another one
WHERE
  phone LIKE '057%' -- Starts with 057

一般的解决方法是这样的:

DECLARE
    @SearchString NVARCHAR(MAX) = '057'
  , @ReplaceString NVARCHAR(MAX) = '053'

UPDATE
  tbl
SET
  phone = @ReplaceString + RIGHT(phone, LEN(phone) - LEN(@SearchString))
WHERE
  phone LIKE (@SearchString + '%')

对于 sql 服务器 2012 使用东西

update tbl
set phone_number=stuff(phone_number,1,3,'053')
WHERE
  phone_number LIKE '057%'