项目场景:

有时间格式的数据作为检索条件时遇到了一个比较有趣的问题
# 问题描述: 有这么一条sql语句:
理论上说这个也能检索到下面的那些数据但实际上并没有获取到下面以1900年份开头的数据
下面三个图是思考是否为转型之后再比对的结果然后又产生了新的问题。
1
2
3
1.为什么图一检索不到图二里的数据?(图一图二)(未解决)
2.图三图四?横杠的作用?对比前的准备?(已解决)
3.45??????(与一类似未解决)

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

解决方案:

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

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

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