2011-05-24 173 views
6

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

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

日期中的时间值总是存在,但只有办公时间,因此从09:00到17:00。

+0

“本月”是什么意思?这应该视为当前月份吗? – 2011-05-24 13:09:35

+0

是的,本月 – stef 2011-05-24 13:17:21

+0

发布在错误的问题。 – 2014-05-25 23:41:54

回答

12

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

+0

@deceze ...如果日期是动态生成的呢?如果下次日期ID 2001-06-12 05:00:00?你如何计算这个日期的第一个日期? – 2011-05-24 13:28:53

+0

@Awais这是一个单独的问题,但不难找到PHP中的第一个月,并用'date('Y-m-d H:i:s')'格式化它。请参阅@ George的答案。 – deceze 2011-05-25 06:11:56

+0

谢谢老兄,我从George的回答中了解到。 – 2011-05-25 06:46:17

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

我认为你可以解决它,这样的事情:

首先,创建一个月的第一天,在MySQL格式在PHP

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

,然后在查询中使用它

select * from something where date >= $firsDay