Member 11776570 Ответов: 3

Нужно преобразовать тип varchar, имеющий дату в формате '03/28/1990', чтобы преобразовать его в datetime


Я должен попробовать это

SELECT DATE_FORMAT(dob,'%d%m%Y'),dob FROM abc;


не работать.

Что я уже пробовал:

Я должен попробовать это

SELECT DATE_FORMAT(dob,'%d%m%Y'),dob FROM abc

3 Ответов

Рейтинг:
8

phil.o

Пожалуйста, смотрите Решение 1 для того, как вы должны относиться к значениям datetime в будущем.

Теперь, для вашего текущего выпуска, существует несоответствие между указанными вами входными данными ('03/28/1990', т. е. месяцем/днем/годом) и строкой формата, которую вы передаете в файл. DATE_FORMAT функция ('%d%m%Y', т. е. день/месяц/год).


Рейтинг:
25

OriginalGriff

В принципе, нет.

Никогда не храните даты в строках - вместо этого используйте столбцы DATETIME, DATE или TIMESTAMP и преобразуйте даты в них на языке презентации (где вы можете работать с различными форматами ввода данных пользователем).

Использование строк "легко", но оно оставляет вас широко открытыми для серьезных проблем позже - например, дата в формате ISO: 2020-04-27, или американский формат: 04-27-2020, или просто "Привет", если вы еще не проверили свои пользовательские данные.

Измените свою БД и храните данные в соответствующих типах данных - это может показаться более громоздким, но позже это сэкономит много горя.


Member 11776570

ладно, я понял вашу точку зрения, но мы не можем изменить тип данных, его клиентскую базу данных. Поэтому мы должны преобразовать его в datetime и сохранить эти данные в другой базе данных, где это тип данных date time.

Рейтинг:
12

Wendelius

Я полностью согласен с OriginalGriff, если это возможно, храните даты, используя соответствующий тип данных. Не только хранение более легко, но и вычисление, форматирование и т. д. легко сделать, когда базовый тип-дата.

Сказав это, в случае, если вы абсолютно не в состоянии изменить тип, вы должны быть в состоянии использовать

str_to_date(dob, '%m/%d/%Y')

Для получения дополнительной информации см.
MySQL :: MySQL 8.0 справочное руководство :: 12.6 функции даты и времени[^]


Member 11776570

Спасибо, это действительно работает. Большое спасибо. Я просто застрял в нем. Я уже работаю слишком много часов. Спасибо, приятель.

Member 11776570

Эта ошибка происходит сейчас

Заданное значение типа String из источника данных не может быть преобразовано в тип datetime указанного целевого столбца.

когда я использую это

DATE_FORMAT(STR_TO_DATE(доб, '%м/%Д/%Г'),'%М%Е%С')

чтобы сохранить его в столбце datetime datatype.
Любое предложение по этому поводу.

Wendelius

Почему вы преобразуете его в строку? Насколько я вижу, вам не нужен DATE_FORMAT. Просто попробуйте что-нибудь вроде

Вставить в MyTable (....)
Выберите STR_TO_DATE(dob, '%m/%d/%Y'),
...
ОТ...