MySQL日期比较

时间:2011-05-24 13:03:53

标签: mysql

日期存储在DB中,如日期时间字段中的“2011-05-26 11:00:00”。我想查找日期大于本月第一天的所有行,即:2011-05-01 09:00:00

无法更改数据库中的日期格式。我可以用什么MySQL函数将DB中的日期转换为可以处理比较的格式?我猜测“本月第一个”的最佳格式是unix时间戳?

日期中的时间值始终存在,但仅限于办公时间,因此从09:00到17:00。

7 个答案:

答案 0 :(得分:12)

如果它存储在DATETIME字段中,只需查询WHERE date > '2011-05-01 09:00:00'

答案 1 :(得分: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 :(得分:2)

或许这样的事情?

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

答案 3 :(得分:0)

直接与日期时间比较:

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

答案 4 :(得分:0)

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

MySQL Reference Manual date and time function中提供了更多的mysql数据和时间函数和示例。

答案 5 :(得分:0)

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

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

如果您真的想转换为Unix时间戳,请查看UNIX_TIMESTAMP函数。

答案 6 :(得分: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