在数据库中选择日期范围(月/年)

时间:2013-01-24 06:45:50

标签: mysql

我有一个关于在MySQL中选择日期范围的快速问题,格式如YYYY-MM-DD

我阅读MySQL select date range issue并了解它的基本用法,但我怎样才能“包括”2月29日?我想避免PHP的解决方法,MySQL中有类似的东西吗?

我无法理解http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

有人能举例说明如何选择二月份的去年数据吗?

2 个答案:

答案 0 :(得分:7)

当您指定一个月时,MYSQL引擎足够聪明,可以获得一个月的正确天数(无论是否是闰年)并相应地评估您的日期字段。

要在您选择的两个日期之间获取数据:(使用interval -1 year从今天开始提前一年)

SELECT * FROM yourtable 
WHERE yourdate BETWEEN DATE_ADD(Now(), Interval -1 YEAR)
AND Now() 
AND MONTH(yourdate) = 2 -- to get data for Month of February
;

或者您可以简单地使用YEAR函数编写而不使用BETWEEN

SELECT * FROM yourtable 
WHERE YEAR(yourdate) = YEAR(Now()) - 1
AND MONTH(yourdate) = 2 -- to get data for Month of February
;

对于Str_to_Date上的问题,该函数用于将包含日期的字符串转换为具有所需格式的日期类型,并且它是DATE_FORMAT函数的反函数。

SELECT STR_TO_DATE('12-Apr-2012', '%d-%M-%Y')
FROM DUAL
;

请注意,在上面的演示中,您必须以STR_TO_DATE函数添加的格式指定日,月,年排列。

PS:你真正想要在这里实现的是相当模糊的,没有同样的数据和问题中显示的预期结果......:)

答案 1 :(得分:2)

以下查询将为您提供去年2月份的数据

SELECT * FROM `your_table_name` WHERE YEAR(`your_date_field_name`) = YEAR(CURRENT_DATE()) AND MONTH(`your_date_field_name`) = 2