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

时间:2012-07-12 22:05:15

标签: mysql date

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

5 个答案:

答案 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

这取决于WEEKDAY函数,该函数以星期一开始,而不是从星期日开始的DAYOFWEEK开始。

答案 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");
        }
    });