我想获得当年每个月的第一天.例如,如果用户选择"2010-06-15",则查询要求从"2010-06-01"而不是"2010-06-15"运行.
请帮我如何计算所选日期的第一天.目前,我正在尝试使用以下mysql选择查询:
Select DAYOFMONTH(hrm_attendanceregister.Date) >= DAYOFMONTH( DATE_SUB('2010-07-17', INTERVAL - DAYOFMONTH('2010-07-17') + 1 DAY ) FROM hrm_attendanceregister;
谢谢
这是你想要的:
select CAST(DATE_FORMAT(NOW() ,'%Y-%m-01') as DATE);
您可以使用MySQL提供的LAST_DAY函数来检索任何月份的最后一天,这很容易:
SELECT LAST_DAY('2010-06-15');
将返回:
2010-06-30
不幸的是,MySQL没有提供任何FIRST_DAY
功能来检索一个月的第一天(不知道为什么).但是在最后一天,您可以添加一天并减去一个月来获得第一天.因此,您可以定义自定义函数:
DELIMITER ;; CREATE FUNCTION FIRST_DAY(day DATE) RETURNS DATE DETERMINISTIC BEGIN RETURN ADDDATE(LAST_DAY(SUBDATE(day, INTERVAL 1 MONTH)), 1); END;; DELIMITER ;
那样:
SELECT FIRST_DAY('2010-06-15');
将返回:
2010-06-01
实际上有一个简单的解决方案,因为这个月的第一天很简单today - (day_of_month_in_today - 1)
:
select now() - interval (day(now())-1) day
与其他非常迂回和间接的方法形成对比.
此外,由于我们对时间组件不感兴趣,因此curdate()
功能更好(也更快)now()
.我们也可以利用 subdate()
2-arity重载,因为它比使用更高效interval
.所以更好的解决方案是:
select subdate(curdate(), (day(curdate())-1))
这是旧的,但这可能对新的人类网络爬虫XD有所帮助
对于当月的第一天,您可以使用:
SELECT LAST_DAY(NOW() - INTERVAL 1 MONTH) + INTERVAL 1 DAY;
您可以使用EXTRACT
获取所需的日期部分:
EXTRACT( YEAR_MONTH FROM DATE('2011-09-28') ) -- 201109
这适用于分组.