我有一个 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:00
和 17: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/