php - mysql 在两个日期/时间之间进行选择

标签 php mysql date time

我有一个 mysql 数据库,它有一个日期字段和一个时间字段。我需要从数据库中选择以下参数。

从 spiff 中选择日期介于 02/01/2016 和时间等于或大于 12:00:00 和日期 02/08/2016 并且时间等于或小于 11:59:59

所以在简单的论坛中,我想选择从 7 天前到今天从中午到中午的所有内容,其中 12;00:00 是截止时间。

我有这段代码,但它并没有完全满足我的要求

SELECT * 
FROM spiff 
WHERE `date` BETWEEN '" . $week_before . "' AND  '" . $today . "' AND time <= '12:00:00'  
ORDER by id DESC

最佳答案

那是行不通的。您不能将日期和时间存储在单独的字段中,然后按两者进行搜索。您排除了所有晚于“中午”的时间,这意味着如果您有这些日期/时间:

02/02/2016 13:00    excluded
02/03/2016 10:00    included
02/04/2016 17:59    excluded

即使那些日期在您指定的范围内,13:0017:59那些被排除在外的变成了它们不是 < '12:00:00'

您需要将日期存储为单个日期时间字段,然后您的查询就变得微不足道了:

SELECT ... WHERE datetimefield BETWEEN '2016-02-01 12:00:00' AND '2016-02-08 11:59:59'

请注意,要使这些类型的日期/时间比较起作用,您必须使用 mysql 的实际日期/时间字段,以及 mysql 的日期时间字符串格式:yyyy-mm-dd .如果您的日期存储为 mm/dd/yyyy ,那么它们不是日期,它们是字符串,并且适用 mysql 的字符串比较规则,这意味着

'10/11/2015' > '09/01/1970' -> TRUE

因为10大于 09 .

关于php - mysql 在两个日期/时间之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414197/

相关文章:

php - 如何在字符串中查找专有名词?

php - MySQL SELECT 语句只搜索表中的 3 个字段

mysql - Laravel where 和 orWhere 函数

c# - 查找两个时区之间的所有时区偏移周期

ruby - 为什么 'Date.parse' 不引发无效日期字符串的异常?

php - 在php中获取basic-auth用户名

javascript - 将完整日历中的日议程分成 15 分钟的时段

php - 尝试让我的登录代码正常工作

php - 试图创造交易历史

javascript - 仅获取日期的时间戳,反之亦然