SQL-запрос принимает январь месяц как 13 вместо 01

0
SELECT STR_TO_DATE( CONCAT( YEAR(MAX(my_date)) , '-', MONTH(MAX(my_date))+1 , '-', 01 ) , '%Y-%m-%d')

Я использую это, чтобы извлечь дату. Я получаю следующий результат:

Output        Data Entry till
2017-07-01    2017 June entry complete
2017-08-01    2017 July entry complete

Но как только ввод данных будет выполнен в 2017 году, я получу 2018-13-01 вместо 2018-01-01. Я знаю, что из-за +1 я добавляю в месяц значение. Я не уверен, как я зациклирую его на 01 после 12?

Значение в файле csv для my_date выглядит как 2017-01-06. Он находится в строчном формате.

Теги:

1 ответ

1
Лучший ответ

Вы выполняете арифметику даты в строке, добавляя 1 к месяцу. Вместо этого используйте функцию DateAdd().

SELECT date_add(STR_TO_DATE( CONCAT( YEAR(MAX(my_date)) , '-', MONTH(MAX(my_date)) , '-', 01 ) , '%Y-%m-%d'), INTERVAL 1 MONTH)
  • 0
    Но не изменит ли это значения и для других месяцев?
  • 0
    О, я понял! Я думаю, что это будет работать! Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню