Изменить числовую колонку на сегодняшний день - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица, один из столбцов - DOB, который в настоящее время имел тип Numeric(7,0).Пример значений столбца следующий:

DOB
0
1050418
1050412
1060303

Я преобразую столбец в SQL следующим образом

SELECT Convert(Date,Convert(varchar,19000000+DOB),101) as DOB_Date From Test where DOB<>0

Моя цель - преобразовать этот столбец в тип даты Дата.

При выполнении SQL

ALTER TABLE TEST ALTER COLUMN DOB DATE NULL;

Ошибка выдачи как

Тип операнда Clash: Числовой несовместим с датой.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете добавить вычисляемый столбец в таблицу, чтобы выполнить преобразование:

alter table t
    add dob_date as (case when dob > 0 then cast(cast(dob + 19000000 as varchar(10)) as date) end);

Если вы хотите сделать это на месте, то вы можете сделать это в несколько шагов:

alter table t alter dob varchar(8);

update t
    set dob = (case when dob <> '0' then 19000000 + dob end);

alter table t alter dob date;

Это журнал преобразования типов, но он должен работать.

0 голосов
/ 30 мая 2018

Два варианта, разница не большая.

1) Измените тип данных столбца на текстовую (например, varchar(10)).Затем преобразуйте текстовые значения на месте в форму, которую можно однозначно преобразовать в дату (например, YYYYMMDD без разделителей), а затем выполните преобразование второго типа данных.

2) Создайте новый столбецтип даты.Выполните обновление, используя существующее выражение, чтобы установить новые значения.Удалите старый столбец и (при необходимости) переименуйте новый столбец, чтобы он соответствовал имени старого столбца.

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