在sql中存储为varchar的日期之间搜索数据

时间:2015-03-14 04:30:29

标签: mysql sql

我将日期字段存储为varchar。我想在两个日期之间选择数据,并将查询编写为:

SELECT * FROM hospitaldetails WHERE expirydate BETWEEN '03/14/2015' AND '03/18/2015'

但是它没有正常工作。它显示03/15/2016的结果。我该如何解决?

3 个答案:

答案 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字段设为实际日期字段。