mysql字符串类型时间比较大小

博客记录了MySQL中字符串类型时间比较的问题。使用CONCAT_WS拼接时间为yyyy - m格式,字符串比较时yyyy - m与yyyy - mm比较无法得出正确结果,因为会先比较字符长度。还给出了解决办法,可使用LPAD填充函数补0以得到正确比较结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日常随笔:
       这里记录一个最近遇到的mysql字符串类型时间的问题

数据结构:
|year(int)| month(int)|
|2016 | 7 |
|2016 |10|
使用CONCAT_WS拼接时间为yyyy-m格式,返回的是字符串类型

注:经测试字符串时间yyyy-m与yyyy-m单独比较,可以得到正确结果,但是yyyy-m与yyyy-mm比较得不出正确结果。
因为字符串比较首先会比较字符长度。 因而直接回返回false
例:
– 字符串时间yyyy-mm,yyyy-m时间格式,既转不了时间格式,也转不了时间戳,亦不能比较大小
– 以下是sql
SELECT DATE_FORMAT(“2019-7”,’%Y-%m’),UNIX_TIMESTAMP(DATE_FORMAT(“2019-7”,’%Y-%m’)),“2019-7”<“2019-10”;

那么像以上数据结构以及数据组合的情况怎么比较。
这里可以用到LPAD填充函数
例:
– 使用LPAD填充函数,不足位数补0
SELECT CONCAT_WS("-",2019,LPAD(6,2,0)),CONCAT_WS("-",2019,LPAD(10,2,0)),CONCAT_WS("-",2019,LPAD(6,2,0))<CONCAT_WS("-",2019,LPAD(10,2,0));
这样操作既可得到比较后的正确结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值