sql 日期输出不正确

sql incorrect date output incorrect

我有一个这样的table

|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

i 运行 这样的查询

WHERE date >= '1/07/20' AND date <= '23/11/20'  

我期望得到一个结果,我只会得到那些日期之间的结果 但我得到了一些来自 2014 年的结果

日期列的数据类型为 varchar #note 我不能改变数据类型

我怎样才能只得到两者之间的日期?

字符串比较是问题所在:通常,'10/01/19'(2019 年 1 月 10 日)大于 '01/01/20'(2020 年 1 月 1 日),因为前者以 [=13= 开头],后者为 0.

您需要将这些字符串转换为日期才能进行比较:

where str_to_date(date, '%d/%m/%y') between '2020-07-01' and '2020-66-23'

低效的,因为在过滤发生之前需要转换整个列。我强烈建议修复您的数据模型,并将日期存储为 dates.

旁注:您的字符串需要 一致地 格式化为 mm/dd/yy 才能正常工作;如果您有不同的格式 - 或者未映射到有效日期的字符串 - 那么您遇到的问题比您在此处提出的问题更大。