• 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)mysql 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.net   李杨 技术博客   PHP技术博客 
     2   www.anzhuo8.net   我的涞源 论坛   涞源地方论坛 
     3   www.百度   百度   百度一下 
     4   哥哥   google   谷歌一下 


    这张表里面,第一和第二条记录的title部分是有空格的,如果我们并不知道,或者由于内容的不能,有无空格有很大的不确定性:

     代码如下复制代码

    select * from table where title = '李杨技术博客';
    select * from table where title like '%李杨技术博客%';

    以上两句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添加字段语句,以便于您获取更多的相关知识。

    转自:https://yq.aliyun.com/ziliao/53405

    补充:MySQL中关于查询条件中的字符串空格问题

    https://blog.csdn.net/alibert/article/details/40981185

    假设当前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。

  • 相关阅读:
    CF547D Mike and Fish
    CF147B Smile House
    [BJOI2017]树的难题
    AT2306 Rearranging
    复利计算器--单元测试
    操作系统 实验1 命令解释程序的编写
    个人项目耗时对比记录表
    复利计算器3.0
    0320记《构建之法》读后感
    复利计算实验总结
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453030.html
Copyright © 2020-2023  润新知