我有一个类似的表
|id| date |name|
1 23/11/20 jake
2 01/07/20 jhon
3 23/05/20 blake
4 11/02/20 drake
5 1/03/14 crake
我运行了一个类似的查询
WHERE date >= '1/07/20' AND date <= '23/11/20'
我期待着一个结果,我只会得到那些日期之间的结果但我得到了一些2014年的结果
日期列的数据类型为varchar#注意,我不能更改的数据类型
我怎么能只得到两者之间的日期?
字符串比较是个问题:通常,'10/01/19'
(2019年1月10日(大于'01/01/20'
(2020年1月1日(,因为前者从1
开始,后者从0
开始。
您需要将这些字符串转换为日期,然后才能进行比较:
where str_to_date(date, '%d/%m/%y') between '2020-07-01' and '2020-66-23'
此效率低下,因为在进行筛选之前需要转换整个列。我强烈建议修复您的数据模型,并将日期存储为date
s。
附带说明:您的字符串需要一致地格式化为mm/dd/yy
才能工作;如果你有不同的格式,或者字符串没有映射到有效的日期,那么你会遇到比这里所问的更大的问题。