MySQL将日期转换为星期和月的开头

DrX*_*eng 5 mysql date

对于"2012-07-12",我如何才能获得本周的开始,即"2012-07-08",以及本月的开始,即"2012-07-01"?

Bor*_*yll 18

每月的第一天:

SELECT DATE_FORMAT('2007-07-12', '%Y-%m-01');
Run Code Online (Sandbox Code Playgroud)

输出:2007-07-01

一周的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12')-1 DAY);
Run Code Online (Sandbox Code Playgroud)

输出:2007-07-08

MySQL参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add


myr*_*och 5

Borophyll相同的答案,但我已经改变了月份第一天的行为来返回日期,而不仅仅是一个字符串,它避免了用户151220回答中提到的日期格式化/解析.

每月的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFMONTH('2007-07-12') - 1 DAY);
Run Code Online (Sandbox Code Playgroud)

输出: 2007-07-01

一周的第一天:

SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12') - 1 DAY);
Run Code Online (Sandbox Code Playgroud)

输出: 2007-07-08

MySQL参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add