MySQL 获取月份、年份的日期列表

Posted

技术标签:

【中文标题】MySQL 获取月份、年份的日期列表【英文标题】:MySQL Get a list of dates in month, year 【发布时间】:2014-02-06 15:56:12 【问题描述】:

我正在做一些报告,我想获取特定月份的所有日期,例如 2014 年 1 月,以及当我执行此“SQL”时:

SELECT datesInMonth WHERE month = 1 AND year = 2014;

我想得到这个列表:

    2014-01-01
    2014-01-02
    2014-01-03
    ...
    2014-01-31

如果我这样做'SQL':

SELECT datesInMonth WHERE month = 2 AND year = 2014;

我想得到这个列表:

    2014-02-01
    2014-02-02
    2014-02-03
    ...
    2014-02-28

如果我这样做'SQL':

SELECT datesInMonth WHERE month = 2 AND year = 2016;

我想得到这个列表:

    2016-02-01
    2016-02-02
    2016-02-03
    ...
    2016-02-29

这可能吗,或者我应该用自己的表格列出未来 100 年的日期:)

【问题讨论】:

您可以使用 UNION 做一个聪明的技巧,或者您可以只在应用程序级别处理业务逻辑。但是你的其他想法也可以。包含未来 1000 年日期的日历表会很小。 是的,它将解决我未来 100 年的问题,但如果存在,我想要一个更好的解决方案。 您可能需要像这里这样的程序。它会创建一个表,但您也许可以返回一个结果集 - schimpf.es/generate-a-list-between-two-dates-in-mysql @Strawberry 100 年后你为什么不来,看看你有没有更好的评论。 谢谢@Shiva 我会试试的。 【参考方案1】:

这里是这个问题的mysql/java解决方案。

创建表语句:

CREATE TABLE `date_table` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

Java 代码:

public static void main(String[] args) throws ClassNotFoundException, SQLException 
        Database db = new Database("root", "root01", "test-db", "10.10.5.11");
        db.connect();
        int start_year = 2013;
        int end_year = 2100;
        for (int year = start_year; year < end_year; year++) 
            for (int month = 1; month <= 12; month++) 
                int days_in_month = 0;
                switch (month) 
                    case 1:  //January
                        days_in_month = 31;
                        break;
                    
                    case 2:  //February
                        if (year % 4 == 0) 
                            days_in_month = 29;
                         else 
                            days_in_month = 28;
                        
                        break;
                    
                    case 3:  //March
                        days_in_month = 31;
                        break;
                    
                    case 4:  //April
                        days_in_month = 30;
                        break;
                    
                    case 5:  //May
                        days_in_month = 31;
                        break;
                    
                    case 6:  //June
                        days_in_month = 30;
                        break;
                    
                    case 7:  //July
                        days_in_month = 31;
                        break;
                    
                    case 8:  //August
                        days_in_month = 31;
                        break;
                    
                    case 9:  //September
                        days_in_month = 30;
                        break;
                    
                    case 10:  //October
                        days_in_month = 31;
                        break;
                    
                    case 11:  //November
                        days_in_month = 30;
                        break;
                    
                    case 12:  //December
                        days_in_month = 31;
                        break;
                    
                
                for (int day = 1; day <= days_in_month; day++) 
                    db.executeInsert("INSERT INTO date_table (date) VALUES ('" + year + "-" + month + "-" + day + "');");
                
            
            System.out.println("YEAR: " + year + " FINISHED");
        
    

我使用这个 sql 获取日期列表:

SELECT * FROM date_table WHERE YEAR(date) = 2014 AND MONTH(date) = 2;

希望有人使用它:)

【讨论】:

【参考方案2】:

您可以在 MySQL 中使用datetime function。特别是 MONTH() 和 YEAR()。如果您将日期传递给这些函数,它将返回月份或年份。例如:

WHERE MONTH(my_date) = 2 and YEAR(my_date) = 2014

如果你想得到一个月内的所有日期,你可以这样做:

SELECT my_date FROM my_table
WHERE MONTH(my_date) = 2 and YEAR(my_date) = 2014

【讨论】:

他们可以使用我的 where 语句来做到这一点 如果我创建日期表,我将使用例如 'SELECT DATE(full_date) WHERE MONTH(full_date) = 2 AND YEAR(full_date) = 2014' 但这是我的第二个选择。

以上是关于MySQL 获取月份、年份的日期列表的主要内容,如果未能解决你的问题,请参考以下文章

mysql日期函数 当前日期 curdate() , 当前年 year(curdate()), 取date的年份 year(date) ,取date的月份 month(date)

在日期选择器中未显示月份和年份下拉列表中的数据

MySQL两时间计算年份差月份差天数差

jquery中根据年份月份获取日期

只需要从日期获取年份和月份

如何从日期获取月份和年份