在两个日期之间选择数据?

5

我正在使用数据库来存储日志,其中有一个名为“date”的列,它保存了插入日期。日期的格式是“MM/DD/YY”。请问如何选择在两个特定日期之间的数据。例如,我尝试了以下代码:

$from_date = "01/01/12";
$to_date = "02/11/12";

$result = mysql_query("SELECT * FROM logs WHERE date >= " . $from_date . " AND date <= " . $to_date . " ORDER by id DESC");

while($row = mysql_fetch_array($result)) {
// display results here
}

但我猜想这不可行,因为日期不是数字。感谢您的帮助! :)

它会起作用。你必须将参数放入 date('')date '$param'str_to_date()convert('$param','%y/%m/%d') 中... - Sergey Benner
你考虑过使用一个真正的日期列或将格式更改为 YY/MM/DD 吗? - Marcus Adams
5个回答

23

使用 BETWEEN 关键字:

"SELECT * FROM logs WHERE date BETWEEN '" . $from_date . "' AND  '" . $to_date . "'
ORDER by id DESC"

如果我需要在两个日期之间找到两个日期怎么办.. 就像 SELECT * FROM logs WHERE date1 AND date2 BETWEEN '" . $from_date . "' AND '" . $to_date . "' @Sarfraz - always-a-learner

3

你可以将字段转换为日期,然后选择从 from_date 到 to_date 之间的数据。

SELECT * FROM logs WHERE date STR_TO_DATE(date, '%m/%d/%Y') between STR_TO_DATE(from_date, '%m/%d/%Y') and STR_TO_DATE(to_date, '%m/%d/%Y')

3
你的问题的答案取决于用于存储“logs”表中“date”字段的数据类型。
SQL(在你的情况下是MySQL)完全能够比较日期。通常使用“BETWEEN..AND..”运算符,但是如果“date”的类型为CHAR(或VARCHAR),那么它将无法正常工作 - 在这种情况下,您需要将“date”字段转换为DATETIME才能进行比较。

0

你需要在日期值 '01/01/12' 周围添加单引号:

$from_date = "01/01/12";
$to_date = "02/11/12";

$result = mysql_query("SELECT * FROM logs WHERE date >= '" . $from_date . "' AND date <= '" . $to_date . "' ORDER by id DESC");

0
将日期参数转换为Unix时间戳,然后进行比较。以下是代码:
$from_date = "2019/01/12";
$to_date = "2019/01/15";

$from_date_unix = strtotime($from_date);
$to_date_unix = strtotime($to_date);    

$result = mysql_query("SELECT * FROM logs WHERE date >= " . $from_date_unix . " AND date <= " . $to_date_unix . " ORDER by id DESC");
while($row = mysql_fetch_array($result)) {
// display results here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接