sqlserver repalce模糊替换

由于SQL Server的REPLACE函数用于替换字符串中的指定子字符串。它执行的是精确替换,所以想进行模糊替换或基于模式的替换,需要结合REPLACE使用CHARINDEX和SUBSTRING函数。

简单的介绍一下CHARINDEX函数和SUBSTRING函数:

  • CHARINDEX(substring, string, start_location)
    CHARINDEX(要查找的子字符串, 要查找的子字符串, (可选)是开始查找的位置。)
    【一般用于提取或搜索数据。】
    【查找一个子字符串在另一个字符串中的位置的函数。】

    SELECT CHARINDEX('apple', 'I like apples and bananas.');
    -- 返回结果为 8

  • STUFF(string1, start, length, string2)
    SUBSTRING(主字符串, 起始位置 起始位置是从1开始计数的, 要删除的字符数量,插入到 string1 中的新字符串)
    【用于从文本字段中提取部分数据】例如提取名字或地址的一部分。
    【它也可用于修改或处理字符串数据。】

    SELECT STUFF('Hello, World!', 7, 5, 'SQL') AS Result;
    -- 返回结果为 "Hello, SQL!"
    STUFF 函数将从第 7 个字符位置开始(即逗号后面),删除长度为 5 的字符(包括空格),然后插入字符串 "SQL"。

  • LEN 函数
    LEN(string)
    【用于检查字符串的长度以进行有效性验证或数据处理】

      SELECT FirstName, LastName, LEN(FirstName + ' ' + LastName) AS FullNameLength
    

    FROM Employees;
    FirstName LastName FullNameLength
    John Doe 8
    Jane Smith 10
    Mike Johnson 12

repalce模糊替换

  • 字符串

    • 将B替换成D,ABC------>ADC

      DECLARE @OriginalString NVARCHAR(MAX) = 'This is a test string with typos.'
      DECLARE @SearchString NVARCHAR(MAX) = 'typos'
      DECLARE @ReplaceString NVARCHAR(MAX) = 'errors'

      -- 查找搜索字符串的位置
      DECLARE @StartPosition INT = CHARINDEX(@SearchString, @OriginalString)

      -- 检查是否找到了搜索字符串,然后进行替换
      IF @StartPosition > 0
      BEGIN
      SET @OriginalString = STUFF(@OriginalString, @StartPosition, LEN(@SearchString), @ReplaceString)
      END

      SELECT @OriginalString

  • 将A后4位替换成1234 ABCDE------>A1234

    DECLARE @OriginalString NVARCHAR(MAX) = N'<div style="background-color:#E9F4FF;width:100%;'

    -- 查找 'width' 的位置
    DECLARE @WidthStartPosition INT = CHARINDEX('width:', @OriginalString)

    -- 如果找到 'width',则进行替换
    IF @WidthStartPosition > 0
    BEGIN
    -- 取 'width' 后面的 4 位字符并替换为 '102%'
    SET @OriginalString = STUFF(@OriginalString, @WidthStartPosition + 6, 4, '102%')
    END

    SELECT @OriginalString

  • 在A和C之间替换成1 ABC------>A1C

    DECLARE @OriginalString NVARCHAR(MAX) = N'<div style="background-color:#E9F4FF;width:100%;'

    -- 找到 'width' 和 '%' 的位置
    DECLARE @WidthStartPosition INT = CHARINDEX('width:', @OriginalString)
    DECLARE @PercentageEndPosition INT = CHARINDEX('%;', @OriginalString)

    -- 如果找到 'width' 和 '%',则进行替换
    IF @WidthStartPosition > 0 AND @PercentageEndPosition > 0
    BEGIN
    -- 计算要替换的内容的起始位置和长度
    DECLARE @ReplaceStartPosition INT = @WidthStartPosition + 6
    DECLARE @ReplaceLength INT = @PercentageEndPosition - @ReplaceStartPosition

      -- 将内容替换为 '102'
      SET @OriginalString = STUFF(@OriginalString, @ReplaceStartPosition, @ReplaceLength, '102')
    

    END

    SELECT @OriginalString

  • 在1234567的第二位之后插入ABC,1234567------>1ABC234567

    DECLARE @OriginalString NVARCHAR(MAX) = '1234567';

    -- 在字符串的第二位之后插入指定的内容
    SET @OriginalString = STUFF(@OriginalString, 2, 0, 'ABC');

    SELECT @OriginalString;

  • 字段

    • 将表A中的column字段中的从width到%之间替换成102

      -- 更新表 A 中的 column 字段
      UPDATE A
      SET column = REPLACE(
      column,
      SUBSTRING(
      column,
      CHARINDEX('width', column),
      CHARINDEX('%', column) - CHARINDEX('width', column) + 1
      ),
      'width:102%'
      )
      WHERE CHARINDEX('width', column) > 0 AND CHARINDEX('%', column) > CHARINDEX('width', column);

相关推荐
zxrhhm3 小时前
SQLServer TOP(Transact-SQL)
sql·sqlserver
J总裁的小芒果2 天前
Mysql SqlServer 分页
数据库·mysql·sqlserver
初九之潜龙勿用4 天前
MS SQL Server 实战 排查多列之间的值是否重复
大数据·数据库·sql·sqlserver·微软
Jeakjava5 天前
SQL Server性能优化之读写分离
数据库·sql·sqlserver·性能优化
一心只为学6 天前
SQL server 日常运维命令
运维·数据库·sqlserver
暖锋丫8 天前
Sqlserver常用sql
数据库·sql·sqlserver
凯酱11 天前
在 sql server 数据库中,查询数据库的占用的空间大小和数据库中各表的占用大小
数据库·sqlserver
woshilys13 天前
sql server 用户信息查询
sqlserver
Commas.KM13 天前
【数据库|第11期】深入掌握 SQL Server、Access 与 SQLite 中的 `UNION` 与 `UNION ALL`:从理论到实践
数据库·sqlserver·sqlite·union·union all·access·数据联合
FreeBuf_16 天前
MAT:一款针对MSSQL服务器的安全检测与审计工具
服务器·安全·sqlserver