У меня есть таблица, состоящая из 2 столбцов: id и month_year
id month_year
1 Dec 2016
2 Jan 2017
3 Feb 2017
4 Mar 2017
.
...
.......
Мне нужен результат, состоящий из формата даты, такого как следующий
id month_year
1 2016-12-01
2 2017-01-01
3 2017-02-01
4 2017-03-01
..
....
......
(We can assume the date to be 1st)
Я мог бы добиться этого с помощью hardcoding it
SELECT id , case when a.month_year = 'Dec 2016' THEN
STR_TO_DATE('01/12/2016','%d/%m/%Y')
when a.month_year = 'Jan 2017' THEN
STR_TO_DATE('01/1/2017','%d/%m/%Y')
when a.month_year = 'Feb 2017' THEN
STR_TO_DATE('01/2/2017','%d/%m/%Y')
when a.month_year = 'Mar 2017' THEN
STR_TO_DATE('01/3/2017','%d/%m/%Y')
end as month_year from [table] a
НО Я хочу БЕЗ ХАРКОДИРОВАНИЯ, когда новые данные приходят, этот запрос не работает. Как я могу продолжить?
Например:
SELECT STR_TO_DATE(CONCAT('Dec 2016','01'),'%b %Y %d');
+-------------------------------------------------+
| STR_TO_DATE(CONCAT('Dec 2016','01'),'%b %Y %d') |
+-------------------------------------------------+
| 2016-12-01 |
+-------------------------------------------------+
SELECT DATE_FORMAT(STR_TO_DATE('Dec 2017','%M %Y'), '01/%m/%Y');
Выход: 01/12/2017