MySQL BETWEEN用于保存为字符串的日期

时间:2014-07-06 21:38:20

标签: mysql

这就是事情 - 我将数据库中的日期保存为字符串格式为dd / mm / yyyy。我想获得日期在两个日期之间的行 - 让我们说11/07/2009和29/08/2014,怎么做?

我试过

SELECT * FROM attr WHERE time_added between '11/7/2009' AND '29/8/2014' 

但它无法正常工作。任何伟大的将是伟大的?

1 个答案:

答案 0 :(得分:1)

首先,建议使用MySQL的DATE类型作为日期,选择日期范围将非常简单有效。但是如果你有自己的理由使用字符串类型(就像你正在使用特定的日历而你没有转换器),那么你应该考虑以下几点:

  • 你告诉你使用dd / mm / yyyy格式的日期,但在你的代码中写的是11/7/2009,应该是11/07/2009
  • 为了选择范围,您应该像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';