事情是这样的 - 我将日期作为字符串以 dd/mm/yyyy 格式保存在数据库中。我想获取日期介于两个日期之间的行 - 比如说 11/07/2009 和 29/08/2014,该怎么做?
我试过了
SELECT * FROM attr WHERE time_added between '11/7/2009' AND '29/8/2014'
但它无法正常工作。任何伟大的都会很棒吗?
最佳答案
首先,日期推荐使用MySQL的DATE类型,选择日期范围会简单高效。但是,如果您有自己的理由使用字符串类型(例如您正在使用特定的日历并且没有转换器),那么您应该考虑以下内容:
- 为了选择范围,您应该保存日期,例如 yyyy/mm/dd,特别是当您在此字段上放置索引时,性能会很高。
- 您不需要在数据库中保存像“/”这样的格式包租人。您可以稍后格式化输出并以您想要的任何顺序和格式显示日期。
因此,我为您提供以下解决方案:
使用 YYYYMMDD 格式保存日期。选择查询将类似于:
SELECT *, DATE_FORMAT(time_added, '%d/%m/%Y') AS time_added2 FROM attr
WHERE time_added between '20090711' AND '20140829';
如果您无法更改数据库,则以下查询将在现有数据库上运行(日期以 dd/mm/yyyy 格式保存):
SELECT * FROM attr WHERE
CONCAT(SUBSTR(time_added, 7, 4), SUBSTR(time_added, 4, 2), SUBSTR(time_added, 1, 2))
BETWEEN '20090711' AND '20140829';
关于MySQL BETWEEN 用于保存为字符串的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600537/