MySQL формат даты в строку - PullRequest
0 голосов
/ 29 марта 2020

У меня есть формат даты, но для отображения на переднем конце я хотел бы отобразить данные следующим образом.

SELECT STR_TO_DATE('5,2013','%m,%Y');

Результат, который я хотел бы получить, - 'May 2013'.

Ответы [ 5 ]

1 голос
/ 29 марта 2020

Почему вы храните даты в виде строковых значений? Mysql имеет выделенные типы данных для значений даты и времени: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html

При использовании даты вы можете легко использовать DATE_FORMAT и установить% m,% Y в качестве форматирования (второй аргумент) .

0 голосов
/ 29 марта 2020

Вы можете использовать функции: str_to_date() для преобразования строки (после объединения префикса '1' в вашу строку) в допустимую дату, а затем date_format() для переформатирования даты:

SELECT date_format(str_to_date(concat('1,', ?),'%d,%m,%Y'), '%b %Y');

Замените ? вашей строкой. Смотрите демо . Результат:

May 2013 
0 голосов
/ 29 марта 2020

Что касается формата, просто прочитайте документы: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date -формат . Вам нужно заглавную букву М для названия месяца. И используйте DATE_FORMAT для перехода от даты к строке.

SELECT DATE_FORMAT(DATE '2013-05-01', '%M %Y');
0 голосов
/ 29 марта 2020

Предполагая, что в вашей базе данных хранится 5,2013, вам нужно использовать DATE_FORMAT после анализа строки:

SELECT DATE_FORMAT(STR_TO_DATE('5,2013','%m,%Y'), '%b %Y')

Почему? Потому что, похоже, у вас нет типа даты, хранящегося в базе данных. Таким образом, вы анализируете это до настоящего времени, используя STR_TO_DATE. Это даст вам формат даты по умолчанию. DATE_FORMAT позволяет применять другие форматирования к нему.

Все доступные значения форматирования документированы здесь: https://www.w3schools.com/sql/func_mysql_str_to_date.asp

В общем, я бы рекомендовал подумать о сохранении объекты даты вместо пользовательских строк даты, таких как 5,2013. Это позволяет избежать этих кастингов, потому что вы можете напрямую использовать DATE_FORMAT. Он также имеет преимущества по фильтрации / упорядочению и производительности. Используя типы дат, вы можете легко отсортировать по ним или отфильтровать, например, все за месяц X.

Я не говорю, что это невозможно с пользовательскими строками, такими как 5,2013, но будет более сложным и может привести к снижению производительности если дБ растет.

0 голосов
/ 29 марта 2020
SELECT replace(date_format(str_to_date('5,2013','%m,%Y'),'%M-%Y'),'-',' ');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...