Как преобразовать тип столбца varchar в тип даты без потери даты - PullRequest
5 голосов
/ 17 августа 2011

Я ищу способ изменить тип данных столбца.В настоящее время в моей базе данных типы столбцов даты были определены как varchar, и мне нужно преобразовать их обратно в тип даты.

Есть идеи, как это сделать?

Ответы [ 6 ]

4 голосов
/ 17 августа 2011

Вам нужно будет адаптировать это на основе вашей точной структуры таблицы, но что-то вроде;

CREATE TABLE temp (startdate varchar(255), stuff varchar(255));

INSERT INTO temp
SELECT startdate,stuff
FROM mytable;

TRUNCATE TABLE mytable;

ALTER TABLE mytable ALTER COLUMN startdate DATETIME NOT NULL;

INSERT INTO mytable
SELECT CAST(startdate AS DATETIME), stuff FROM temp;

DROP TABLE temp;
2 голосов
/ 17 августа 2011

Сначала создайте новый столбец с типом данных. Затем запустите запрос на обновление, чтобы заполнить новый столбец значением старого, применив любое преобразование, если это необходимо. Затем удалите старый столбец. Наконец, переименуйте новый столбец встарый

1 голос
/ 17 августа 2011
  1. Создание нового столбца DATE с временным именем
  2. Заполнение нового столбца запросом UPDATE, в котором используется STR_TO_DATE ()
  3. Если всесправа удалите столбец VARCHAR и переименуйте столбец DATE.
0 голосов
/ 29 марта 2019

Если поле вашего столбца равно VARCHAR и дата сохранена как DD-MM-YYYY, тогда мы должны преобразовать дату в формате YYYY-MM-DD, следуя PHP-коду.

$cd = array();

$cd1 = array();

$cdf = array();

$getdata = mysqli_query($link,"SELECT columnname FROM tablename");

while($row=mysqli_fetch_array($getdata))        
{   
    $cd = $row['columnname'];

    $cd1 = strtotime($cd);

    $cdf = date('Y-m-d',$cd1);

    mysqli_query($link,"UPDATE tablename SET columnname = 
    REPLACE(columnname,'$cd','$cdf')");
}

После запуска этого кода PHP в таблице MySQL измените тип данных вашего столбца на 'DATE'. Это работает для меня без потери или усечения данных.

0 голосов
/ 07 августа 2018

Хочу поделиться этим для пользователей сервера SQL. Для меня этот метод гораздо удобнее и безопаснее.

  1. В вашей таблице создайте новый столбец «NewDate» (временно или назовите как хотите).
  2. Убедитесь, что в таблице, которую вы хотите преобразовать, нет недопустимого формата даты и времени. Попробуйте эти форматы здесь: https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_cast3 <--- вам необходимо тщательно проверить, иначе при выполнении команды, приведенной ниже, возникнет ошибка. </p>

  3. Выполнить эту команду:

ОБНОВЛЕНИЕ myTable SET NewDate = CAST (OldDate AS datetime) WHERE (OldDate <> '') и (OldDate IS NOT NULL) - чтобы убедиться, что вы разыгрываете только то, что нужно, иначе возникнет ошибка.

  1. Теперь вы можете удалить старый столбец, т. Е. «OldDate».
  2. Наконец, вы можете перетащить новую таблицу, которую вы создали, в слот, где вы только что удалили старый столбец в дизайне таблицы.
0 голосов
/ 16 ноября 2013

Mysql формат даты по умолчанию: ГГГГ-ММ-ДД. Если вы попытаетесь вставить дату иначе, как вы это сделали, дата будет вставлена ​​со следующими значениями: 000-00-00, что подсказывает вам приемлемый формат даты для mySql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...