我对使用约会很困惑。如何编写此查询,以便仅选择今天和未来2天之间的结果?
日期存储在名为EstimatedTime的列中(带有" text" type ...),如此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>";
}
?>
任何帮助将不胜感激!非常感谢你。
答案 0 :(得分:1)
如果将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
答案 1 :(得分:1)
您可以使用str_to_date
功能并添加间隔:
select str_to_date('201502181150', '%Y %m %d');
所以你的查询将是:
WHERE str_to_date(t.EstimatedTime, '%Y %m %d') >= date(now())
AND str_to_date(t.EstimatedTime, '%Y %m %d') < date(now()) + interval 2 day
答案 2 :(得分:0)
PHP解决方案:
值201502181150
是以毫秒为单位的日期吗?如果是这样,只需将其视为整数并添加1000*60*60*24*2
即2天。你可以这样做:
$t = (int)$row['EstimatedTime'];
$query = "SELECT * FROM data WHERE EstimatedTime > $t AND EstimatedTime < ". ($t+1000*60*60*24*2) ." ORDER BY id DESC"
但是它必须执行2个MySQL查询。
答案 3 :(得分:0)
我会尝试像
这样的东西<?php
$stmt = $db->query('SELECT * FROM data WHERE Status = "D" ORDER BY id DESC');
$currDate = time();
//$time_ahead = Current Date + 2 Days (172800 seconds = 2 days)
$time_ahead = $currDate + 172800;
while($row = $stmt->fetch()) {
if (!strtotime($row['EstimatedTime'] < $currDate || !strtotime($row['EstimatedDate'] > $time_ahead))) {
echo "<tr>";
echo '<td>' . date('M d', strtotime($row['EstimatedTime'])) . '</td>';
echo "</tr>";
}
}
?>