MySQL日期比较

6
日期以"2011-05-26 11:00:00"的形式存储在datetime字段中。我想查找所有日期大于本月第一天(即2011-05-01 09:00:00)的行。
数据库中的日期格式不能更改。我应该使用哪个MySQL函数将数据库中的日期转换为可进行比较的格式?我猜“本月第一天”的最佳格式是Unix时间戳?
日期中的时间值始终存在,但仅限于办公时间,即从上午9点到下午5点。

“这个月”是什么意思?应该被视为当前月份吗? - Shakti Singh
发布在错误的问题上。 - Christian Tucker
7个回答

12
如果数据存储在一个 DATETIME 字段中,只需使用查询语句 WHERE date > '2011-05-01 09:00:00'

@deceze... 如果日期是动态生成的呢?如果下一次日期是2001-06-12 05:00:00,你将如何计算该日期的第一个日期? - Awais Qarni
@Awais 这是一个相当独立的问题,但在 PHP 中找到每月的第一天并用 date('Y-m-d H:i:s') 格式化它并不难。请参考 @George 的回答。 - deceze
谢谢,伙计。我已经从乔治的回答中理解了。 - Awais Qarni

4
$firstDayOfMonth = date( 'Y-m-d H:i:s', mktime(0,0,0,date('n'),1,date('Y'));
$query = "SELECT * FROM `table` WHERE `date` >= '$firstDayOfMonth'";

2

也许像这样的东西?

$oDateTime = new DateTime();
$sQuery = "SELECT * FROM table WHERE date >= ".$oDateTime->format("Y-m")."-01 09:00:00";

0

直接比较日期时间:

WHERE date_field >= '2011-05-01 00:00:00'

0

DATETIME字段可以像整数字段一样进行过滤,例如:

SELECT * FROM `table` WHERE `date` > '2011-05-01 09:00:00'

如果你真的想要转换成Unix时间戳,可以看一下UNIX_TIMESTAMP函数。

0

我认为你可以这样解决:

首先,在PHP中以MySQL格式创建当月的第一天。

$firsDay = date('Y-m-d 00:00:00', strtotime(date('Y-m').'-01 00:00:00'));

然后,在查询中使用它

select * from something where date >= $firsDay

0

你可以在MySQL中使用TIMESTAMPDIFF函数来比较时间,
使用FROM_UNIXTIME函数将Unix时间戳格式化为日期。

更多MySQL日期和时间函数以及示例可在MySQL参考手册日期和时间函数中找到。


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