【问题标题】:mysql query between two date fields两个日期字段之间的mysql查询
【发布时间】:2014-02-16 17:40:57
【问题描述】:

好的,这就是我想要从我的数据库中获取的内容。我有两个日期字段到达日期和离开日期,我非常了解如何从这里开始。我需要检查到达日期 >='01/01/2013 和出发日期

使用 phpmyadmin 进行查询

【问题讨论】:

  • 您的查询是什么?你应该有类似arrivaldate >= '2013-01-01'
  • 您的日期列的列类型是什么?

标签: sql phpmyadmin


【解决方案1】:

如果您要比较两种不同的数据类型(在您的情况下 - date 列和字符串文字),则不应依赖数据库来转换它们。正如您在用例中看到的那样,您将日期转换为字符串,并按字典顺序进行比较。相反,您应该将文字显式转换为 dates,并对该数据类型进行所有比较:

SELECT *
FROM   my_table
WHERE  arrivaldate >= STR_TO_DATE('01-01-2013', '%D-%M-%Y') 
AND    departdate  <= STR_TO_DATE('15-02-2014', '%D-%M-%Y') 

【讨论】:

  • Warning | 1411 | Incorrect datetime value: '01-01-2013' for function str_to_date
  • 是的,这代表我草率 - 现在试试。
  • 是的,我知道 - 我只是不明白为什么 - 谢谢你的回答 - 现在很有意义
【解决方案2】:

试试这个:

WHERE
     STR_TO_DATE( arrivaldate, '%m/%d/%Y' ) >= '01/01/2013'
  AND
     STR_TO_DATE( departdate, '%m/%d/%Y' ) <= '02/15/2014'

别忘了使用:

  • '%m'(小写m)是两位数的月份
  • '%d'(小写d)是两位数的日期
  • '%Y'(大写 Y)是 4 位数年份

在列上定义特定于日期的数据类型以存储 datetimedate and time 等值始终是一个不错的选择。

可接受的数据类型为datedatetimetimestamp

【讨论】:

  • thanx - 我会试一试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2016-07-10
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多