经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
MySQL中字符串比较大小详解(日期字符串比较问题)
来源:jb51  时间:2022/8/31 17:26:45  对本文有异议

前言

数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为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'  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FdmqBpj3-1641372898325)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105163155854.png)]

? 图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'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ls9jHyI4-1641372840373)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105164214829.png)]

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

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

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

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

总结

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

 友情链接: NPS