MySQL中字符串比较大小详解(日期字符串比较问题)

前言

数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较。

如上所述,当字符串用于比较时间格式数据进行时间维度的比较时会出现问题。如以下sql进行查询时

 select *  FROM  work_day_content as wdc WHERE wdc.work_day >= '2019-09-30 00:00:00' AND   wdc.work_day<= '2019-10-06 00:00:00'

图1-1

如图1-1所示,没有查询出任何条件

当使用日期函数把字符串转化为日期时

select * FROM work_day_content as wdc where date(wdc.work_day) >= date('2019-09-30 00:00:00' ) AND date(wdc.work_day)<= date('2019-09-30 00:00:00' ) 

图1-2

如图1-2所示,查出了符合条件的数据

分析为何第一个sql语句没有查询出内容。由于该字段使用的是字符串形式存储,因此此时比较大小采用的是字符串方式比较大小。

字符串方式比较大小是从左往右进行匹配。对于长度不同的字符串进行匹配时。较短字符串比较完后还没有大小之分。则较长的字符串较大。如下面sql所示

select '2019-09-30 ' < '2019-09-30 00:00:00'

发现此时**字符串’2019-09-30 00:00:00’**较大。因此之前的sql没有查出日期为2019-09-30的数据

因此。在使用字符串表示时间时,需要使用时间函数进行比较。

sql提供的时间函数有:date(), str_to_date()

另外,在mysql当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前面没有数字,那么就只能截取的数值为0,那么进行加减的时候结果都是0,进行乘除的时候结果都是NULL。

总结

到此这篇关于MySQL中字符串比较大小的文章就介绍到这了,更多相关MySQL字符串比较大小内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql实现将字符串字段转为数字排序或比大小

    目录 将字符串字段转为数字排序或比大小 排序 比大小 sql语句字符串如何比较大小 解决方法 将字符串字段转为数字排序或比大小 mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱.后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果. 这时候需要把字符串转成数字再排序. 最简单的办法就是在字段后面加上+0 如把'123'转成数字123(以下例子全为亲测): 排序 例: 方法一: ORDER BY '123'+0

  • MySQL中字符串比较大小详解(日期字符串比较问题)

    前言 数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较. 如上所述,当字符串用于比较时间格式数据进行时间维度的比较时会出现问题.如以下sql进行查询时 select * FROM work_day_content as wdc WHERE wdc.work_day >= '2019-09-30 00

  • MYSQL中Truncate的用法详解

    本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.下面介绍SQL中Truncate的用法 当你不再需要该表时, 用 drop:当你仍要保留该表,但要删除所有记录时, 用 truncate:当你要删除部分记录时(always with a WHE

  • mysql中整数数据类型tinyint详解

    目录 1.1 tinyint类型说明 1.2 实践环境说明 1.3 加unsigned属性 1.3.1 SQL模式开启严格模式 1.3.2 SQL模式未开启严格模式 1.4 加zerofill属性 1.4.1 SQL模式开启严格模式 1.4.2 SQL模式未开启严格模式 1.5 不加unsigned和zerofill属性 1.5.1 SQL模式开启严格模式 1.5.2 SQL模式未开启严格模式 1.1 tinyint类型说明 数据类型 显示长度 占用字节 有符号 无符号 tinyint 加上un

  • MySQL中数据视图操作详解

    目录 1.视图概述 1.1创建视图 1.2视图的查询 2.操作视图 2.1通过视图操作数据 2.2修改视图定义 2.3删除视图 1.视图概述 视图是从一个或多个表(或视图)导出的表.视图与表(有时为与视图区别,也称表为基本表)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表. 视图一经定义,就可以像表一样被查询.修改.删除和更新.使用视图有下列优点: 1.为用户集中数据,简化用户的数据查询和处理

  • MySQL中JSON字段数据类型详解

    目录 前言 创建JSON值 搜索JSON类型数据 在 JSON 和非 JSON 值之间转换 JSON 值的汇总 总结 前言 JSON 类型是从 MySQL 5.7 版本开始支持的功能,MySQL 支持由RFC 7159定义的本机JSON数据类型,该类型可有效访问 JSON(JavaScript 对象 table 示法)文档中的数据.与将 JSON 格式的字符串存储在字符串列中相比,JSON数据类型具有以下优点: 自动验证存储在JSON列中的 JSON 文档.无效的文档会产生错误. 优化的存储格式

  • mysql中的mvcc 原理详解

    目录 简介 前言 一.mysql 数据写入磁盘流程 二.redo log 1.redolog 的整体流程 2.为什么需要 redo log 三.undo log 1.undo log 特点 2.undo log 类型 3.undo log 生成过程 4.undo log 回滚过程 5.undo log的删除 四.mvcc 1.什么是MVCC 2.MVCC组成 3.快照读与当前读 快照读 当前读 五.mvcc操作演示 1.READ COMMITTED 隔离级别 2.REPEATABLE READ 

  • mysql中#{}和${}的区别详解

    #{}会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号 order by #{userId}   这里假如userId = 111,那么解析成sql时会变成 order by "111"这里如果userId = idStr,那么解析成sql时会变成 order by "idStr" ${}会将传入的数据直接显示生成在sql中 order by #{userId}  这里假如userId = 111,那么解析成sql时会变成 order by 111这里如

  • MySQL中存储过程的详细详解

    目录 概述 优点 缺点 MySQL存储过程的定义 存储过程的基本语句格式 存储过程的使用 定义一个存储过程 定义一个有参数的存储过程 定义一个流程控制语句 IF ELSE 定义一个条件控制语句 CASE 定义一个循环语句 WHILE 定义一个循环语句 REPEAT UNTLL 定义一个循环语句 LOOP 使用存储过程插入信息 存储过程的管理 显示存储过程 显示特定数据库的存储过程 显示特定模式的存储过程 显示存储过程的源码 删除存储过程 后端调用存储过程的实现 总结 概述 由MySQL5.0 版

  • MySQL中正则表达式(REGEXP)使用详解

    目录 前言 LIKE和REGEXP的区别 OR进行匹配 匹配范围 匹配特殊字符 匹配字符类 匹配多个实例 定位符 ^有两种用法 附:Mysql字符串截取 和 截取字符进行查询 总结 前言 有时候使用MySQL进行数据库查询数据的时候,like查询存在局限性,这时候就可以使用MySQL中的正则表达式查询的方式. 正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较. 从文本文件中提取电话号码 查找名字中间带有数字的文件 文本块中重复出现的单词 替换页面的UR

  • mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既"时间触发器",与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理. 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限单独使用event调用SQL语句时,

随机推荐