Изменение типа данных колонки в таблице
Есть таблица в базе данных, в данной таблице в одной из колонок время хранится в формате int.т.е хранится время в минутах как время в футбольном матче. допустим игрок забил гол на 90 минуте. следовательно в таблицу заносится 90. Мне нужно преобразовать данную колонку в формат time без потери данных. Как это сделать?
Отслеживать
задан 23 апр 2019 в 9:43
user334837 user334837
3 1 1 бронзовый знак
Не очень понятно в какой формат должно быть преобразовано. В плане, время после чего? Может быть Вам поможет данный ответ: stackoverflow.com/questions/12568408/…
23 апр 2019 в 9:50
Если без потери данных — то ОДНОЗНАЧНО создание нового поля, копирование в него данных, сотня проверок, и только после этого — удаление старого поля. Ещё лучше — перед началом процесса сделать бэкап таблицы.
23 апр 2019 в 9:52
поле time подразумевает часы, минуты, если говорить о правильном преобразовании, то наверно надо взять время начала матча и к этому значению добавить кол-во минут
Как изменить тип столбца и имеющиеся строки используя данные из другой таблицы?
У меня есть две таблицы: progress и subjects. В progress есть столбец subject типа text, а в таблице subjects есть 2 столбца: subject_id типа integer и subject типа text.
Как мне заменить тип столбца subject в таблице progress на integer, заодно изменив имеющиеся записи в этой таблице?
Пробовал такой вариант (переименовал subject на subject_id для дальнейшего присвоения ему внешнего ключа):
ALTER TABLE progress RENAME COLUMN subject TO subject_id; ALTER TABLE progress ALTER COLUMN subject_id TYPE INTEGER USING ( SELECT subjects.subject_id FROM subjects, progress WHERE progress.subject_id = subjects.subject );
но это неправильный запрос:
ОШИБКА: нельзя использовать подзапрос в выражении преобразования
СТРОКА 1: . ogress ALTER COLUMN subject_id TYPE INTEGER USING (SELECT su.
- Вопрос задан более года назад
- 76 просмотров
1 комментарий
Простой 1 комментарий
Изменить тип данных столбца
На sql server в таблице ‘table’ есть столбец ‘date’, в котором хранится дата в формате numeric: 1519721624578 — пример одной произвольной записи. Это кол-во миллисекунд, прошедших с 01.01.1970 (так оракл хранит дату, данные sql server получает с оракла через openquery). Нужно преобразовать этот столбец, чтобы дата отображалась нормально. Пробую вывести через select:
select CONVERT(datetime, '01.01.1970') + CAST(date/86400000 as datetime) from table
Все работает, но хочу изменить сам столбец:
update table set date = (CONVERT(datetime, '01.01.1970') + CAST(date/86400000 as datetime))
Выдает ошибку:
Implicit conversion from data type datetime to numeric is not allowed. Use the CONVERT function to run this query.
Что логично, потому что новый и старый типы данных не совпадают. ALter table alter column не работает, потому что столбец уже заполнен.
Как поменять тип столбца в таблице sql
Как изменить тип столбца таблицы (с varchar на nvarchar) без использования дополнительной таблицы или создания нового столбца в уже существующей? Существует ли третий способ?
Если несуществует, то какой из стандартных способов быстрее — через дополнительную таблицу или новые столбцы?. Логика подсказывает что второй.
Re: Как изменить тип столбца таблицы? (MS SQL 2000-2005)
| От: | pkarklin |
| Дата: | 27.10.06 05:51 |
| Оценка: |
Здравствуйте, Vikont, Вы писали:
V>Как изменить тип столбца таблицы (с varchar на nvarchar) без использования дополнительной таблицы или создания нового столбца в уже существующей? Существует ли третий способ?
V>Если несуществует, то какой из стандартных способов быстрее — через дополнительную таблицу или новые столбцы?. Логика подсказывает что второй.
CREATE TABLE Table1(col1 varchar(100) NOT NULL) GO INSERT Table1 VALUES('Тестовая запись') GO ALTER TABLE Table1 ALTER COLUMN col1 nvarchar(200) NOT NULL GO SELECT * FROM Table1 GO DROP TABLE Table1
Re[2]: Как изменить тип столбца таблицы? (MS SQL 2000-2005)
| От: | pkarklin |
| Дата: | 27.10.06 05:55 |
| Оценка: |
Здравствуйте, pkarklin, Вы писали:
P>Здравствуйте, Vikont, Вы писали:
V>>Как изменить тип столбца таблицы (с varchar на nvarchar) без использования дополнительной таблицы или создания нового столбца в уже существующей? Существует ли третий способ?
V>>Если несуществует, то какой из стандартных способов быстрее — через дополнительную таблицу или новые столбцы?. Логика подсказывает что второй.
P>CREATE TABLE Table1(col1 varchar(100) NOT NULL) P>GO P>INSERT Table1 VALUES('Тестовая запись') P>GO P>ALTER TABLE Table1 ALTER COLUMN col1 nvarchar(200) NOT NULL P>GO P>SELECT * FROM Table1 P>GO P>DROP TABLE Table1 P>
Ошибочка в ALTERе, надо nvarchar(100).
