Синтаксис ваших запросов неверен.
STR_TO_DATE()
действительно предназначен для преобразования строки в дату.В качестве второго аргумента он ожидает строку (не буквальную строку!), Которая представляет формат входной строки.
Учитывая формат вашей даты, вы можете использовать:
SELECT STR_TO_DATE('6/2/2018 3:00:00 PM', '%e/%c/%Y %l:%i:%s %p')
Сведения о спецификаторе формата:
%e
: день месяца, числовой (0..31
) %c
: месяц, числовой (0..12
) %Y
: год, цифра, четыре цифры %l
: час (1..12
) %i
: минуты, цифры (00..59
) %s
: Секунды (00..59
) %p
: AM
или PM
Демонстрация на DB Fiddle
Если вы действительно хотите преобразовать тип данных столбца, вам нужно будет создать временный столбец, обновить его преобразованными данными, затем удалить исходный столбец и переименовать.временный, например:
ALTER TABLE stuff ADD (datum_new datetime);
UPDATE stuff SET datum_new = STR_TO_DATE(datum, '%e/%c/%Y %l:%i:%s %p');
ALTER TABLE stuff DROP datum;
ALTER TABLE stuff CHANGE COLUMN datum_new datum datetime;
Если вы используете MySQL 8.0, последний оператор может быть записан как:
ALTER TABLE stuff RENAME COLUMN datum_new TO datum;