使用Date函数从数据库中提取记录

时间:2014-10-25 14:01:50

标签: php mysql

我真的很难过 - 我的数据库中有一个表,其中一个名为'today'的列有日期和时间记录。该列的条目如下所示:

October 25, 2014, 4:58 am
October 25, 2014, 4:36 am

我在按日期划分行时遇到问题;我认为时间戳正在搞乱MySQL查询。我需要一个SQL查询来提取变量$ today与“今天”列中的日期信息匹配的任何记录。这不起作用:

$today = date("F j, Y"); // looks like this: October 25, 2014

$result = mysqli_query($link,"SELECT * FROM records WHERE today = $today"); // 'today' represents the column in the table

while($row = mysqli_fetch_array($result)) {
        echo var_dump($row);
    }

我只是得到一个空的结果,我认为由于时间戳。有人可以建议一个更好的MySQL查询,它只能获取今天$今天匹配“今天”列中日期的行吗?

3 个答案:

答案 0 :(得分:2)

虽然在varchar中将日期和时间存储为字符串并不是一个好主意,但您仍然可以更改查询以将包含当前日期的stringLIKE语句匹配:

$result = mysqli_query($link,"SELECT * FROM records WHERE today LIKE '$today%'"); 

这只是为了让您当前的设置作为临时修复工作,但我强烈建议您查看datetimetimestamp或类似的日期类型,如果这是一个严肃的项目,而不仅仅是玩周围。编程。

<强>更新

使用datetime,您可以获得与今天相同的日期:

SELECT * FROM `records` WHERE `today` = CURDATE();

使用timestamp,您需要将其作为date传递,以便您的查询为:

SELECT * FROM `records` WHERE date(`today`) = CURDATE();

答案 1 :(得分:0)

您可以使用MySQL日期函数:

SELECT *
FROM records
WHERE today = CURRENT_DATE;

如果today列上有时间组件,则最佳结构为:

SELECT *
FROM records
WHERE today >= CURRENT_DATE and today < date_add(CURRENT_DATE, interval 1 day)

答案 2 :(得分:0)

很明显两个日期都不相同。两个日期都被视为文本值,并且不相等。您需要在MySQL查询中转换包含日期的列:

$result = mysqli_query($link,"SELECT * FROM records WHERE DATE_FORMAT(today, '%F %j, %Y') = $today");

请注意,您必须更改列以存储DATE类型的值。或者只使用其他答案中提出的查询。