Как конвертировать varchar в datetime, не работает - PullRequest
0 голосов
/ 08 февраля 2019

Я импортировал несколько столбцов из текстового файла в мою таблицу stuff.

Мне пришлось импортировать дату как varchar(255).Я хочу преобразовать тип данных из varchar в datetime.

Формат данных даты:

6/2/2018 3:00:00 PM
6/2/2018 4:00:00 PM
6/2/2018 5:00:00 PM

Я безуспешно пробовал следующее:

select datum from stuff str_to_date(datum, %d/%m/%Y)

и:

select datum from stuff where convert(datetime,datum,103);

1 Ответ

0 голосов
/ 08 февраля 2019

Синтаксис ваших запросов неверен.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...