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'
这是低效的,因为在过滤发生之前需要转换整个列。我强烈建议修复您的数据模型,并将日期存储为 date
s.
旁注:您的字符串需要 一致地 格式化为 mm/dd/yy
才能正常工作;如果您有不同的格式 - 或者未映射到有效日期的字符串 - 那么您遇到的问题比您在此处提出的问题更大。
我有一个这样的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'
这是低效的,因为在过滤发生之前需要转换整个列。我强烈建议修复您的数据模型,并将日期存储为 date
s.
旁注:您的字符串需要 一致地 格式化为 mm/dd/yy
才能正常工作;如果您有不同的格式 - 或者未映射到有效日期的字符串 - 那么您遇到的问题比您在此处提出的问题更大。