mysql需要通过替换replace、截取substring、查找位置locate这三个函数结合使用来实现如PHP正则替换preg_match函数的效果。
1、删除案例:
以下是数据库中的一个表newstxt:
+----+------------------------------------------+
| id | zdname |
+----+------------------------------------------+
| 1 | 我天天晒太阳,
要删除或替换的不定字符串1
还喝西北风 |
| 2 | 一起来游泳吧!
要删除或替换的不定字符串2
软件园3期体育管 |
| 3 | 百里下载-绿色安全的软件、游戏下载平台:
要删除或替换的不定字符串3
,太棒了! |
+----+------------------------------------------+
mysql语句:
update newstxt set zdname= replace(zdname, substring(zdname, locate('
', zdname),locate('
', zdname)-locate('
', zdname)+4),'');
注意:+4 为
的长度,根据指定字符串长度如变化
函数说明:
替换函数:zdname=replace(zdname,'被替换的字符串','新的字符串');//此时zdname中的旧字符串已经被替换成了新的字符串;
截取函数:zdname=substring(zdname,开始截取的位置int,截取多少个字符串int);//此时zdname等于截取到的值;
查找位置:zdname=locate('要查找字符串',zdname);//此时zdname等于'要查找字符串'的出现位置;
+4 为
的长度
2、替换案例:
以下是数据库中的一个表xz_ecms_news_data_1:
+----+------------------------------------------+
| id | newstext |
+----+------------------------------------------+
| 1 |
卖惨
我天天晒太阳,还喝西北风|
| 2 |
游泳
一起来游泳吧!软件园3期体育管|
| 3 |
网站
百里下载-绿色安全的软件、游戏下载平台,太棒了!|
+----+------------------------------------------+
mysql语句:
update xz_ecms_news_data_1 set newstext=
replace(#替换函数
newstext,
substring(#截取函数
newstext,#字段名
locate('
', newstext),#'
'中'<'的位置
locate('
', newstext)-locate('
', newstext)+4#'
'中'>'的位置,4是
的长度
),
concat(#拼接函数
'
', newstext)+22,#'
'中'>'的位置,22是
的长度,可以把\计数为1或直接不对/进行计数
locate('
', newstext)-(locate('
', newstext)+22)#'
'中'<'的位置,22是
的长度,可以把\计数为1或直接不对/进行计数
),
'
'
)
);
3、延伸实列
以下是数据库中的一个表xz_ecms_news_data_1:
+----+------------------------------------------+
| id | newstext |
+----+------------------------------------------+
| 1 |
卖惨
我天天晒太阳,还喝西北风|
| 2 |
游泳
一起来游泳吧!软件园3期体育管|
| 3 |
网站
百里下载-绿色安全的软件、游戏下载平台,太棒了!|
+----+------------------------------------------+
mysql语句:
update xz_ecms_news_data_1
set newstext = replace (#替换函数原型:replace(字段名,被替换的字符串,新的字符串)
newstext,#字段名
##--------------截取被替换的字符串开始--------------
substring(#截取函数原型:substring(字段名,截取开始位置int,截取结束位置int)
newstext,#字段名
#--------------截取被替换内容的开始位置开始--------------
#获取取 '
' 中第一个字符在newstext字段的位置
locate(#获取字符串第一次出现的位置函数原型:locate(字符串,字段名,起始位置int) 如果没有“起始位置int”则从0开始查找
substring(
newstext,
#获取取 “
locate('
#获取取 “>” 中第一个字符在newstext字段的位置
locate(
'>',
newstext,
locate('
) - locate('
),
newstext
)
#--------------截取被替换内容的开始位置结束--------------
,
#--------------从截取被替换内容开始位置算起,截取多少个字符开始--------------
#获取取 “
” 最后一个字符在newstext字段的位置
locate('
', newstext) - locate(
substring(
newstext,
#获取取 “ locate('
#获取取 “>” 中第一个字符在newstext字段的位置
locate(
'>',
newstext,
locate('
) - locate('
的长度
),
newstext
) + 4 #4是
的长度,根据结束字符串的长度如变化
#--------------从截取被替换内容开始位置算起,截取多少个字符结束--------------
)
##--------------截取被替换的字符串结束--------------
,
##--------------新的的字符串开始--------------
concat(#拼接函数原型:concat(字段名1或字符串1,字段名2或字符串2,字段名N或字符串N)
'',
#concat()中如果需要通过程序获取内容和字符串进行拼接,需要把程序部份括起来,让程序部份先运行获取内容后再让concat拼内容
(
substring(
newstext,
#--------------截取保留内容的开始位置开始--------------
#获取取 “
locate('
+
#获取
的长度
length(
#截取“
”的内容,含“
”
substring(
newstext,
#'
locate('
#获取取 “>” 中第一个字符在newstext字段的位置
locate(
'>',
newstext,
locate('
) - locate('
的长度
)
)
#--------------截取保留内容的开始位置结束--------------
,
#--------------从截取保留内容开始位置算起,截取多少个字符开始--------------
#这里拿到的是“
”中“<”的位置信息
locate('
', newstext) - (
#获取取 “
locate('
#获取
的长度
length(
#截取“
”的内容,含“
”
substring(
newstext,
#'
locate('
#获取取 “>” 中第一个字符在newstext字段的位置
locate(
'>',
newstext,
locate('
) - locate('
的长度
)
)
)
#--------------从截取保留内容开始位置算起,截取多少个字符结束--------------
)
),
'
'
)
##--------------新的的字符串结束--------------
);