Я не могу изменить тип данных с TINYTEXT на DATE & / DATETIME - PullRequest
0 голосов
/ 06 марта 2020

Я использую SQL 8.0 и все еще учусь, и я внес в него некоторые хорошие изменения. Теперь я застрял на дате, они находятся в data_type из TINYTEXT от импорта, а каждое другое поле равно VARCHAR(60) или INT для Первичного ключа, и я неплохо с ним справился, но я застрял на data_type даты.

Я делал это с первого дня: это работало для date типа

SELECT *, DATE_FORMAT(column_name , "%d/%m/%Y %H:%i:%s")
FROM table_name; 

(для Datetime t работа.)

сейчас я попробовал это:

INSERT INTO database_test.table_test.field_name(today) 
VALUES(STR_TO_DATE('07-25-2012','%m-%d-%y') ) 

Вместо %m-%d%y мне нужен европейский формат: %d/%m/%Y для ДАТЫ. И %d/%m/%Y %H:%i:%s для моих DATETIME. Оба в TINYTEXT. (Примечание: они датируются с 1899 по 2099 год для будущего типа данных «ДАТА».)

1 Ответ

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

Я собираюсь сделать пару предположений ...

  1. от SQL 8.0 Вы имеете в виду MySQL 8.0 (STR_TO_DATE нестандартно, поэтому может не работать с другими серверами баз данных)
  2. даты в вашем поле TINYTEXT хранятся в формате %d/%m/%Y %H:%i:%s

... и для В качестве аргумента я скажу, что поле даты TINYTEXT называется date_string.

Я бы создал новый столбец DATE, а затем UPDATE со значением с date_string - с использованием функции STR_TO_DATE (как вы пытались) - и, если это успешно, удалите исходный столбец и, возможно, переименуйте новый столбец DATE.


Добавить реальная дата столбец

Я называю это date_date здесь.

ALTER TABLE `table_test` ADD `date_date` DATE NOT NULL AFTER `date_string`;

ОБНОВЛЕНИЕ реальной даты значением из поля TINYTEXT

(при условии d/m/Y H:i:s формат)

UPDATE `table_test` SET `date_date` = STR_TO_DATE(`date_string`, '%d/%m/%Y %H:%i:%s');

должно работать, пока формат в столбце TINYTEXT соответствует формату, установленному в функции STR_TO_DATE. В любом случае у вас будут оригинальные и преобразованные даты в таблице, поэтому вы можете проверить, что данные выглядят нормально.

...