保存为字符串的日期之间的MySQL

保存为字符串的日期之间的MySQL,mysql,Mysql,事情是这样的——我正在以dd/mm/yyyy格式将日期作为字符串保存在数据库中。我想得到两个日期之间的行,比如说2009年7月11日和2014年8月29日,怎么做 我试过了 SELECT * FROM attr WHERE time_added between '11/7/2009' AND '29/8/2014' 但它不能正常工作。任何伟大的都是伟大的?首先,建议使用MySQL的日期类型进行日期选择,选择日期范围将非常简单有效。但是,如果你有自己的理由使用字符串类型(就像你正在使用一个特定

事情是这样的——我正在以dd/mm/yyyy格式将日期作为字符串保存在数据库中。我想得到两个日期之间的行,比如说2009年7月11日和2014年8月29日,怎么做

我试过了

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

但它不能正常工作。任何伟大的都是伟大的?

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

  • 您说过您正在使用dd/mm/yyyy格式作为日期,但在您的代码中,您编写了2009年11月7日,即2009年11月7日
  • 为了选择范围,您应该像yyyy/mm/dd那样保存日期,特别是当您在该字段上放置索引时,它将是高性能的
  • 您不需要在数据库中保存像“/”这样的格式租用者。您可以稍后格式化输出,并以任何顺序和格式显示日期
因此,我向您提供以下解决方案:

使用YYYYMMDD格式保存日期。select查询类似于:

SELECT *, DATE_FORMAT(time_added, '%d/%m/%Y') AS time_added2 FROM attr 
WHERE time_added between '20090711' AND '20140829';
或者,如果无法更改数据库,则以下查询将在现有数据库上工作(日期以dd/mm/yyyy格式保存):


是的,如果您将日期保存为日期,那就太好了。但有可能这样做吗?为什么您首先将数据存储为字符串?@TheCrafter:嗯,您可以在运行时转换它们,而不必在查询中直接使用任何SP。您可以使用
stru to_DATE(time_添加,'%d/%m/%Y')
将字符串转换为日期类型,但是MySQL不会对查询使用索引,请参阅。
SELECT * FROM attr WHERE 
CONCAT(SUBSTR(time_added, 7, 4), SUBSTR(time_added, 4, 2), SUBSTR(time_added, 1, 2)) 
BETWEEN '20090711' AND '20140829';