sql中replace语句如何做模糊匹配并删除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中replace语句如何做模糊匹配并删除相关的知识,希望对你有一定的参考价值。

要求如下:
一个表A中有一个字段INFO, 里面内容不一,但都有一个共同特征。如
info your <CHECK1>****这里面内容都不一样**<CHECK123>
yes info <CHECK1>****这里面内容都不一样**<CHECK123>
yes info yes2 info <CHECK1>****这里面内容都不一样**<CHECK123>

我想把INFO字段里面每行中<CHECK1>****这里面内容都不一样**<CHECK1>部分都删除。怎么匹配并删除?
结果要如下:
info your
yes info
yes info yes2 info

参考技术A 关系数据库应该很难做到,你可以把这个字段和表主键导出到文本文件中,使用正则替换一下,则导入到一个临时表做替换 参考技术B declare @a varchar(1000)
set @a='info your <CHECK1>****这里面内容都不一样**<CHECK123>111'
select LEFT(@a,CHARINDEX('<',@a,1)-1)+right(@a,CHARINDEX('>',reverse(@a))-1)

追问

多谢。请看下我的补充问题,你第二行怎么全部内容都进去了?

追答

那直接LEFT就好了,我以为你<CHECK123>后面还会有呢

declare @a varchar(1000)
set @a='info your <CHECK1>****这里面内容都不一样**<CHECK123>111'
select LEFT(@a,CHARINDEX('<',@a,1)-1)

追问

不明白你第二行什么意思。我实际要怎么写。因为每行都不一样
set @a='info your ****这里面内容都不一样**111'

追答

把@a换成你要截取的列就行了

select LEFT(info,CHARINDEX('<',info,1)-1) from 表A

追问

明白。我大概看明白你写的。可是:
因为每行都不一样,有些行可能会这样
info*********这里也都不一样*** your ****这里面内容都不一样**111

和111只是我找出来的标志,也都是一串字符。

追答

解释一下:这个SQL的意思就是取info中‘<’第一次出现位置左侧的字符串+info中‘>’最后一次出现位置右侧的字符串

select LEFT(info,CHARINDEX('<',info,1)-1)+right(info,CHARINDEX('>',reverse(info))-1) from 表A

本回答被提问者采纳

以上是关于sql中replace语句如何做模糊匹配并删除的主要内容,如果未能解决你的问题,请参考以下文章

java中PreparedStatement执行带参数的sql语句如何实现模糊查询?

SQL的模糊匹配区别---like,rlike,regexpx

SQL模糊匹配

java中PreparedStatement执行带参数的sql语句如何实现模糊查询?

sqlserver2008从一个表中模糊查询并分页

sql语句模糊查询的问题?