php - 仅选择今天和 future 2 天内的结果

标签 php mysql

我对日期处理感到非常困惑。我该如何编写此查询,以便它只选择今天和 future 2 天之间的结果?

日期存储在名为 EstimatedTime 的列中(具有“文本”类型...),例如 201502181150

<?php 

$stmt = $db->query('SELECT * FROM data WHERE Status = "D" ORDER BY id DESC');

/*
$Date = 201502181150;
$time_ahead = date('M d', strtotime($Date. ' + 2 days'));
// The above returns Feb 20, but how can I do this on MySQL?
*/

while($row = $stmt->fetch()) {
    echo "<tr>";
    echo '<td>' . date('M d', strtotime($row['EstimatedTime'])) . '</td>';
    echo "</tr>";
}

?>

如有任何帮助,我们将不胜感激!非常感谢。

最佳答案

如果 EstimatedTime 列声明为数据类型 DATETIMEDATE,那么就很简单:

WHERE t.EstimatedTime >= DATE(NOW())
  AND t.EstimatedTime  < DATE(NOW()) + INTERVAL 2 DAY

NOW() 返回当前日期和时间,DATE() 函数修剪掉时间部分,使其相当于午夜。

<小时/>

如果该列被声明为字符类型,而不是 DATETIME (但为什么在上帝的绿色地球上你会这样做?),将 DATETIME 表达式转换为字符适当的规范格式,以便字符串比较能够正常工作:

WHERE t.EstimatedTime >= DATE_FORMAT(DATE(NOW())                 ,'%Y%m%d%H%i%s')
  AND t.EstimatedTime  < DATE_FORMAT(DATE(NOW()) + INTERVAL 2 DAY,'%Y%m%d%H%i%s')

如果 EstimatedTime 存储为数字(整数)数据类型,则通过添加零将字符串转换为数字...

WHERE t.EstimatedTime >= DATE_FORMAT(DATE(NOW())                 ,'%Y%m%d%H%i%s')+0
  AND t.EstimatedTime  < DATE_FORMAT(DATE(NOW()) + INTERVAL 2 DAY,'%Y%m%d%H%i%s')+0

关于php - 仅选择今天和 future 2 天内的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591295/

相关文章:

php - 将 html 文件导入格式为带有缩进和颜色的 HTML 的 &lt;textarea&gt;?

php - CakePHP:您的服务器上的 URL 重写配置不正确

php - Yii,更改原始发布的属性

mysql - Strongloop mysql 连接器 ER_NO_DB_ERROR : No database selected

mysql - mariadb 主到主复制自动增量设置

MySQL 将行值合并为单行

mysql - 使用 "MySQL for Excel"将 Excel 上传到数据库

php - 正则表达式在 php 文件中查找函数参数

php - PHP 联系表单中的换行符

php - 尝试将 Joomla 网站移至新帐户时出现 SQL 错误