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

标签 mysql

事情是这样的 - 我将日期作为字符串以 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/

相关文章:

PHP Mysql 查询插入

php - 访问器未被调用

mysql - SQL根据某些数据进行选择

php - 左连接mysql问题

MySQL 如何更新另一个表中同一行的多个列

mysql - 两个表之间的条件语句

mysql错误: violation: 1052 Column 'created_at' in where clause is ambiguous'

php - 包迁移不起作用(没有错误)

java - 如何检查模式是否由 <jdbc :embedded-database> tag 创建

sql - 我在哪里可以找到 mysql 的国家和州列表