mysql查询字段中带空格的值的sql语句,并替换

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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111990.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)

    使用Java中间MessageDigest该文本MD5加密(Java中间MD5样品加密算法演示)

  • JRebel插件使用详解

    JRebel插件使用详解简介JRebel是一套JavaEE开发工具。Jrebel可快速实现热部署,节省了大量重启时间,提高了个人开发效率。JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源作出修改的时候,这…

  • zoj1942

    zoj1942一开始连题目都没看都就乱写以为是要输出最短路径然后还理解了很久所要输出的距离所走路径的最小边当有直达的边时,如果比其他路线的最大边要小,那就是这个直达边如果比其他路线的最大边要大,那就输出其他路线的最大边的最小边说起来好像很绕。。自己的理解能力还是太差了#include#include#includeusingnamespacestd;double

  • 以太坊 如何挖矿_以太坊asic矿机

    以太坊 如何挖矿_以太坊asic矿机以太坊(ETH)是什么?它是公链之王,有人说它可能会超越比特币(BTC),其应用非常广泛,在以太坊世界里挖矿可以得到奖励,那么怎么挖矿?一下是以太坊的挖矿教程,相信看完教程后,你也能迅速的开始自己的挖矿之旅!我来详细道来。开始挖矿前的准备工作:1、硬件需求:系统要求.Windows7/8/10系统—–显卡要求.AMD或NVIDIA显卡,至少拥有4GB显存。2、软件准备:首先需要一款挖矿软件。Claymore’sDualMiner是原版挖矿软件需要掌握基础知识才可以使

    2022年10月15日
  • Java中如何输入一个字符

    Java中如何输入一个字符在一次编写代码时需要让程序接收一个字符,当我写出scanner.next时,我惊奇的发现,Scanner类中没有定义读取char的方法!!!Java中的扫描器类支持nextInt(),nextLong(),nextDouble()等。但是没有nextChar()。要读取char,我们使用next().charAt(0)。next()函数返回输入中的下一个标记/字符作为字符串,并且charAt(0)函数返回该字符串中的第一个字符。所以,我们有了思路:先创建一个Scanner对象,调用Scanner对象

  • ▲ 实现一个简单的快递时间轴效果

    ▲ 实现一个简单的快递时间轴效果

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号