Displaying Month Names Column wise in a given range
SELECT MONTHNAME(STR_TO_DATE(6, '%m')) Month;
OUTPUT
+---------------------------------+
| Month |
+---------------------------------+
| June |
+---------------------------------+
Now How to Display all months from JAN to DEC.
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a1.months,'%m'),'%b'),'-11'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
OUTPUT
+------------+
| date |
+------------+
| 2011-01-01 |
| 2011-02-01 |
| 2011-03-01 |
| 2011-04-01 |
| 2011-05-01 |
| 2011-06-01 |
| 2011-07-01 |
| 2011-08-01 |
| 2011-09-01 |
| 2011-10-01 |
| 2011-11-01 |
| 2011-12-01 |
+------------+
Here I concatinated '2011' Year so we are getting all 2011 months. I am displaying first date of each month. Suppose if you want only Month and Year Names as Output.
select MONTHNAME(STR_TO_DATE(a1.months, '%m')) as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
Output
+-----------+
| date |
+-----------+
| January |
| February |
| March |
| April |
| May |
| June |
| July |
| August |
| September |
| October |
| November |
| December |
+-----------+
Now the Original question How to get the dates between given date range for example Oct-2011 to May-2012.
select * from (
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a1.months,'%m'),'%b'),'-11'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
UNION
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a2.months,'%m'),'%b'),'-12'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a2
) b where date between STR_TO_DATE('01-Oct-11','%d-%b-%y') and STR_TO_DATE('01-may-12','%d-%b-%y');
Output
+------------+
| date |
+------------+
| 2011-10-01 |
| 2011-11-01 |
| 2011-12-01 |
| 2012-01-01 |
| 2012-02-01 |
| 2012-03-01 |
| 2012-04-01 |
| 2012-05-01 |
+------------+
SELECT MONTHNAME(STR_TO_DATE(6, '%m')) Month;
OUTPUT
+---------------------------------+
| Month |
+---------------------------------+
| June |
+---------------------------------+
Now How to Display all months from JAN to DEC.
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a1.months,'%m'),'%b'),'-11'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
OUTPUT
+------------+
| date |
+------------+
| 2011-01-01 |
| 2011-02-01 |
| 2011-03-01 |
| 2011-04-01 |
| 2011-05-01 |
| 2011-06-01 |
| 2011-07-01 |
| 2011-08-01 |
| 2011-09-01 |
| 2011-10-01 |
| 2011-11-01 |
| 2011-12-01 |
+------------+
Here I concatinated '2011' Year so we are getting all 2011 months. I am displaying first date of each month. Suppose if you want only Month and Year Names as Output.
select MONTHNAME(STR_TO_DATE(a1.months, '%m')) as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
Output
+-----------+
| date |
+-----------+
| January |
| February |
| March |
| April |
| May |
| June |
| July |
| August |
| September |
| October |
| November |
| December |
+-----------+
Now the Original question How to get the dates between given date range for example Oct-2011 to May-2012.
select * from (
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a1.months,'%m'),'%b'),'-11'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a1
UNION
select STR_TO_DATE(CONCAT('01-',date_format(STR_TO_DATE(a2.months,'%m'),'%b'),'-12'),'%d-%b-%y') as date
from (select 1 months union select 2 union select 3 union select 4 union select 5 union select 6 union
select 7 months union select 8 union select 9 union select 10 union select 11 union select 12) a2
) b where date between STR_TO_DATE('01-Oct-11','%d-%b-%y') and STR_TO_DATE('01-may-12','%d-%b-%y');
Output
+------------+
| date |
+------------+
| 2011-10-01 |
| 2011-11-01 |
| 2011-12-01 |
| 2012-01-01 |
| 2012-02-01 |
| 2012-03-01 |
| 2012-04-01 |
| 2012-05-01 |
+------------+
No comments:
Post a Comment