我将日期字段存储为varchar
。我想在两个日期之间选择数据,并将查询编写为:
SELECT * FROM hospitaldetails WHERE expirydate BETWEEN '03/14/2015' AND '03/18/2015'
但是它没有正常工作。它显示03/15/2016
的结果。我该如何解决?
答案 0 :(得分:2)
将varchar数据转换回日期:
Where str_to_date(expirydate, '%m/%d/%Y') between str_to_date('03/14/2015', '%m/%d/%Y') and str_to_date('03/18/2015', '%m/%d/%Y')
使用varchar数据,比较基于词典顺序。在您的情况下,这意味着日期的月份部分优先于该年份。
答案 1 :(得分:1)
当您将日期存储为varchar时,您将失去所有比较之间的比较。
在比较之前将值转换为日期,以确保获得正确的结果。
答案 2 :(得分:0)
这是另一个提示。如果您完全坚持使用varchar字段来包含日期数据,请使用格式'yyyy-mm-dd'。这样,词法排序将产生与转换到日期然后排序相同的顺序。但是,如果您有机会更改它,请将expirydate
字段设为实际日期字段。