SQL Server 替換

-小龍人發表於2021-01-01

場景

  1.替換欄位中全部匹配的字串
  2.替換指定位置的字串,如匹配目標字串的第一個,或者最後一個替換

方法

  1.REPLACE替換全部匹配內容

 REPLACE(string_expression, string_pattern, string_replacement)
 引數:
  string_expression 要搜尋的字串表示式
  string_pattern 是要查詢的子字串
  string_replacement 替換字串

  2.STUFF刪除指定長度的字元,並在指定的起點處插入另一組字元

 STUFF(string_expression1, start, length, string_expression2)
 引數:
  string_expression1 要搜尋的字串表示式
  start 刪除開始位(>=1)
  length 刪除長度
  string_expression2 插入字串

Demo

    目標資料庫如下
在這裡插入圖片描述
  需求1:替換所有PersonId和PersonName中的1414030230和張三 替換為 2021和王加油

 select F_Id,F_PersonId,REPLACE(F_PersonId,'1414030230','2020'),
 F_PersonName,REPLACE(F_PersonName,N'張三',N'王加油') from TempPerson

在這裡插入圖片描述
  需求2:替換第一個匹配的資料

 --CHARINDEX:匹配的字串起始位置,沒有匹配的資料返回值為0
 --len:字串長度
 select F_Id,F_PersonId,
  STUFF(F_PersonId,CHARINDEX('1414030230',F_PersonId),len('1414030230'),'2020'),
  F_PersonName,
  STUFF(F_PersonName,CHARINDEX(N'張三',F_PersonName),len(N'張三'),'王加油')
 from TempPerson

在這裡插入圖片描述
  需求3:替換最後一個匹配的資料

 --REVERSE:字串倒轉
 select F_Id,F_PersonId,
  REVERSE(STUFF(REVERSE(F_PersonId),CHARINDEX(REVERSE('1414030230'),REVERSE(F_PersonId)),len('1414030230'),REVERSE('2020'))),
 F_PersonName,
  REVERSE(STUFF(REVERSE(F_PersonName),CHARINDEX(REVERSE(N'張三'),REVERSE(F_PersonName)),len(N'張三'),REVERSE(N'王加油')))
 from TempPerson

在這裡插入圖片描述
  從上面兩個示例中可看出,有的資料替換為NULL,這是因為CHARINDEX方法沒有找到匹配的字串時返回值為0,STUFF方法替換開始位需要大於0,等於0時,返回內容為NULL,所以在實際使用STUFF中,避免產生NULL,需要加上where條件篩選到想要的資料再使用STUFF替換。

相關文章