2014-02-06 68 views
4

我做了一些报告,我想在特定月份的所有日期,例如2014年1月,当我做这个“SQL”:MySQL的获取在一个月中日期的列表,一年

SELECT datesInMonth WHERE month = 1 AND year = 2014; 

我想这个名单:如果我这样做 'SQL'

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

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年:)

+0

有一个聪明的技巧,你可以做使用UNION,或者您可以在应用程序级别处理业务逻辑。但是你的其他想法也可以。日历甚至在未来1000年的日历表将很小。 – Strawberry

+0

是的,它会解决我未来100年的问题,但我想要一个更好的解决方案,如果存在。 – AdrianES

+1

您可能需要一个像这样的程序。它创建一个表,但你可能会返回一个结果集 - http://schimpf.es/generate-a-list-between-two-dates-in-mysql/ – Shiva

回答

1

下面是这个问题了MySQL/Java解决方案。

CREATE TABLE STATMENT:

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; 

希望有人用它:)

0

您可以在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 
+0

他们可以做到这一点,使用我的where语句 –

+0

如果我创建日期表我会用例如'SELECT DATE(full_date)WHERE MONTH(full_date)= 2 AND YEAR(full_date)= 2014',但这是我的第二个选择。 – AdrianES

相关问题