mysql查询字段中带空格的值的sql语句,并替换
(⾃⼰写的这四⾏)查询带有空格值的数据:SELECT * FROM 表名 WHERE 字段名 like '% %';
去掉左边空格 update tb set col=ltrim(col);
去掉右边空格 update tb set col=rtrim(col);
去掉两边空格 update tb set col=rtrim(col);
(1) replace 函数
语法:replace(object,search,replace)
意思:把object中出现search的全部替换为replace
代码如下复制代码
update `news` set `content`=replace(`content`,' ','');//清除news表中content字段中的空格 这样就可以直接⽤like查询了。
(2)mysql trim 函数
语法:trim([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
以下举例说明:
代码如下复制代码
mysql> SELECT TRIM(' phpernote  ');
-> 'phpernote'
mysql> SELECT TRIM(LEADING 'x' FROM 'xxxphpernotexxx');
-> 'phpernotexxx'
mysql> SELECT TRIM(BOTH 'x' FROM 'xxxphpernotexxx');
-> 'phpernote'
mysql> SELECT TRIM(TRAILING 'xyz' FROM 'phpernotexxyz');
-> 'phpernotex'
当我们在使⽤sql查询的时候,如果数据库中的这个字段的值含有空格(字符串内部,⾮⾸尾),或者我们查询的字符串中间有空格,⽽字段中没有空格。那么我们很有可能就什么都查不到。假如有下⾯的⼀张表:
表名
id  url  title  content
1  www.111cn  李杨 技术博客  技术博客
2  www.anzhuo8  我的涞源 论坛  涞源地⽅论坛
3  www.百度  百度  百度⼀下
4  哥哥  google  ⾕歌⼀下
这张表⾥⾯,第⼀和第⼆条记录的title部分是有空格的,如果我们并不知道,或者由于内容的不能,有⽆空格有很⼤的不确定性:
代码如下复制代码
select * from table where title = '李杨技术博客';
select * from table where title like '%李杨技术博客%';
以上两句sql均⽆法查询出正确的结果,那么我们应该怎么写呢?
请看下⾯:sql语句替换表中内容
代码如下复制代码
select * from table where trim(replace(title,' ','')) = trim(replace('李杨技术博客',' ',''));
select * from table where trim(replace(title,' ','')) like trim(replace('%李杨 技术博客%',' ',''));
trim的作⽤是去掉字符串收尾的空格,replace的作⽤是去掉字符串内部的空格。
这样就可以正确的进⾏匹配了,如果不希望给mysql太多压⼒,条件部分的对空格的处理我们可以在程序中实现。
以上是云栖社区⼩编为您精⼼准备的的内容,在云栖社区的博客、问答、、⼈物、课程等栏⽬也有的相关内容,欢迎继续使⽤右上⾓搜索按钮进⾏搜索replace , 字符串 , 函数 代码 mysql新增字
段sql语句、mysql修改字段sql语句、mysql删除字段sql语句、mysql加字段sql语句、mysql添加字段语句,以便于您获取更多的相关知识。
补充:MySQL中关于查询条件中的字符串空格问题
假设当前数据库中有个表:sysuser
有个字段是:sysUseName
字段中有条记录的内容是:robin
请看下⾯这两个SQL语句:
SELECT * from sysuser s where s.sysUseName = 'robin'
SELECT * from sysuser s where s.sysUseName = 'robin空格'
SELECT * from sysuser s where s.sysUseName = 'RoBin空格'
这三条语句均可以查询出那条记录。
官⽅⽂档上说是MySQL校对规则属于PADSPACE,对CHAR和VARCHAR值进⾏⽐较都忽略尾部空格,和服务器配置以及MySQL版本都没关系。
MySQL安装⽬录下有个doc⽬录(Windows),⾥⾯的 Data Types -> String Types -> The CHAR and VARCHAR Types 这⼀⼩节有对这个问题的说明以及相关的例⼦(版本不⼀样可能章节的编号可能有变动,还是看标题吧): All MySQL collations are of type PADSPACE. This means that all CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces.?
这样带来的问题是:我如何需要精确匹配robin这个内容?假设有⼀个登陆功能,我希望⽤户输⼊‘robin’可以登陆,但是输⼊‘robin空格’却不能登录,该如何实现。
解决办法如下:
SELECT * from sysuser s where s.sysUseName = BINARY 'robin '
BINARY不是函数,是类型转换运算符,它⽤来强制它后⾯的字符串为⼀个⼆进制字符串,可以理解为在字符串⽐较的时候区分⼤⼩写,精确匹配。
另外,因为有的MySQL特别是4.*以前的对于中⽂检索会有不准确的问题,可以在检索的时候加上binary。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。