Sql server SQL Server更新并替换字符的某些索引

Sql server SQL Server更新并替换字符的某些索引,sql-server,Sql Server,我需要更新和替换数据库中的所有IP,并保存一些索引 这= 至= 仅更改IP并保留所有索引默认值只需更换 使用您的表名创建mytable 使用您的列名创建mycolumn “新价值”与您的新ip “myvalue”与您的ip一起更改 更新MYTABLE 设置MYCOLUMN=REPLACE(MYCOLUMN,子字符串(MYCOLUMN,7,CHARINDEX('/',MYCOLUMN,7)-7),'NEWVALUE') 其中MYCOLUMN='MYVALUE' 要仅更新IP地址,请使用STUFF(

我需要更新和替换数据库中的所有IP,并保存一些索引

这=
至=

仅更改IP并保留所有索引默认值

只需更换

  • 使用您的表名创建mytable
  • 使用您的列名创建mycolumn
  • “新价值”与您的新ip
  • “myvalue”与您的ip一起更改

    更新MYTABLE
    设置MYCOLUMN=REPLACE(MYCOLUMN,子字符串(MYCOLUMN,7,CHARINDEX('/',MYCOLUMN,7)-7),'NEWVALUE')
    其中MYCOLUMN='MYVALUE'

  • 要仅更新IP地址,请使用
    STUFF()
    函数

    UPDATE table 
    SET Col = STUFF(Col, 7, 11, '192.168.2.2')
    
    这里,我假设
    IP
    的固定长度

    编辑:-使用动态长度方法

    UPDATE table 
    SET Col = STUFF(Col, 7, (PATINDEX('%[^://]/%', Col)+1)-7, '192.168.100.254')
    

    您可以尝试以下解决方案:

    declare @s varchar(50) = 'ftp://192.168.1.2/Y2018/M2/JNxxxxx', @ip varchar(50) = '192.168.2.2'
    
    select @s, STUFF(@s,
                     --index of //
                     CHARINDEX('//', @s, 1) + 2,
                     --length, that actual IP holds in a string
                     CHARINDEX('/', @s, CHARINDEX('//', @s, 1) + 2) - CHARINDEX('//', @s, 1) - 2,
                     --new IP address to paste in place of an old one
                     @ip)
    

    “保留一些索引”,你这么说是什么意思,我需要保留所有字符,而不是192.168.1.2,因为我只需要将此ip更改为新的ipI。我认为OP意味着他们希望在整个实例中找到并替换一个整体;这意味着他们不知道他们的数据存储在哪里。然而,我也不知道“持有一些指数”是什么意思。对于OP,您需要对此进行详细说明。不起作用,我尝试了此更新AP_jobsdescription SET FTPFolder=REPLACE(FTPFolder,SUBSTRING(FTPFolder,7,CHARINDEX('/',FTPFolder,7)-7),'192.168.2.2'),其中FTPFolder='192.168.1.2'您的筛选器错误,您应该将整个值放入WHERE子句,如
    其中FTPFolder='1ftp://192.168.1.2/Y2018/M2/J232Nxxxxx“
    为什么不
    替换(MyColumn,'192.168.1.2','192.168.2.2')
    。我不确定MyColumn是否有一个预设值(可能有不同的目录),因此不确定是否符合OP的模糊需求。是的,如果OP想要一个接一个地更改值,这是有意义的,但我猜他正在寻找更灵活的方法。嘿…但是当IP八位组为3时,它不能与192.168.100.254一起工作,它不能工作…@VansavangTHONGPASEUTH。。对
    patindex()
    functionWow使用动态方法。。。你太好了,非常感谢你