MySQL以时间作为条件加不加引号的问题探讨

项目场景:

有时间格式的数据作为检索条件时遇到了一个比较有趣的问题


问题描述:

有这么一条sql语句:

在这里插入图片描述
理论上说这个也能检索到下面的那些数据但实际上并没有获取到下面以1900年份开头的数据
在这里插入图片描述
下面三个图是思考是否为转型之后再比对的结果然后又产生了新的问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.为什么图一检索不到图二里的数据?(图一图二)(未解决)
2.图三图四?横杠的作用?对比前的准备?(已解决)
3.45??????(与一类似未解决)

原因分析:

ok项目原因找到了,自己给自己摆了个乌龙,该时间数据数据库类型为varchar,所以像图一这种时间的对比方式是不正确的,应该先将数据库内的数据类型转换为时间格式在作比较。
问题2是因为图中为字符出串的对比(逐个字符按顺序对比),
剩余两个问题还未解决


解决方案:

像数据库里是时间相关的格式是可以进行直接的对比的但是必须要加单引号!如果是varchar类型的话要用

//对比时间的条件
STR_TO_DATE(对应时间列,'%Y-%m-%d') <STR_TO_DATE('传来的参数','%Y-%m-%d');

差不多这种形式格式来对比,但实际上还是会检索不到1900年份的数据?(千年虫问题?还是数据库在做对比的时候底层逻辑与人脑逻辑不同)。我会保留考虑这个问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值