我对日期处理感到非常困惑。我该如何编写此查询,以便它只选择今天和 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
列声明为数据类型 DATETIME
或 DATE
,那么就很简单:
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/