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);

相关推荐
小李来了!21 小时前
Oracle、MySQL、SQL server介绍及有何区别
数据库·mysql·oracle·sqlserver
Leon-Ning Liu3 天前
SQL Server在ldf文件误删的情况下恢复数据库
数据库·sqlserver
姜太小白4 天前
【SQLServer】SQL Server 2022 连接证书错误解决
网络·数据库·sqlserver
gaozhiyong08135 天前
SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)
spring boot·mysql·sqlserver
源远流长jerry8 天前
dpdk19.08编译问题解决方案
数据库·postgresql·sqlserver
全栈小58 天前
【数据库】Sql Server 安装教程,一键到底,沉浸式下载安装MSSQL和SSMS
数据库·sqlserver
Msshu12311 天前
多协议快充取电芯片 支持与主板MCU共用D+D-网络可取电可与电脑传输数据
elasticsearch·sqlserver·flink·rabbitmq·storm
夏光芒11 天前
SQLSERVER数据库常用语句
数据库·sqlserver
北京_小杰子25 天前
Windows10本地安装SQLserver数据库连接的过程
数据库·windows·sqlserver·php
山岚的运维笔记1 个月前
SQL Server笔记 -- 第86章:查询存储
笔记·python·sql·microsoft·sqlserver·flask