对于“2012-07-12”,我如何才能获得本周的开始,即“2012-07-08”,以及本月的开始,即“2012-07-01”?
答案 0 :(得分:16)
每月的第一天:
SELECT DATE_FORMAT('2007-07-12', '%Y-%m-01');
输出:2007-07-01
一周的第一天:
SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12')-1 DAY);
输出:2007-07-08
MySQL参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
答案 1 :(得分:5)
与Borophyll's相同的答案,但我已经更改了该月第一天的行为以返回日期,而不仅仅是一个字符串,它避免了user151220's回答中提到的日期格式化/解析。< / p>
每月的第一天:
SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFMONTH('2007-07-12') - 1 DAY);
输出:2007-07-01
一周的第一天:
SELECT DATE_SUB('2007-07-12', INTERVAL DAYOFWEEK('2007-07-12') - 1 DAY);
输出:2007-07-08
MySQL参考:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
答案 2 :(得分:0)
来自Borophyll的DATE_FORMAT回复非常好,但是提供字符串而不是日期。所以无法轻易比较。
如果您需要将其用作与日期字段的比较,请使用 str_to_date 将其反转回日期而不是字符串。
select x from y where date >= str_to_date( DATE_FORMAT(now()-interval 12 month,'Y-%m-01'), '%Y-%m-%d')
如果您(比如说)查看12个月的销售数据,但您希望始终从一个月的第一天开始。
答案 3 :(得分:0)
对于那些需要星期一作为一周的第一天的人:
SELECT DATE_SUB('2007-07-12', INTERVAL WEEKDAY('2007-07-12') DAY);
输出:2007-07-09
答案 4 :(得分:0)
如果您只想编码并忘记它,它将起作用,它将立即使用日期时间并始终返回MTD结果 -
angular.module("app")
.config(function($injector)
{
if ($injector.has("$mdThemingProvider"))
{
var mdThemingProvider = $injector.get("$mdThemingProvider");
mdThemingProvider.theme("default")
.primaryPalette("blue", {
"default": "500",
"hue-1": "400",
"hue-2": "200",
"hue-3": "50"
})
.accentPalette("green", {
"default": "600"
})
.warnPalette("red");
}
});