2015-11-16 4 views
1

У меня есть DateTime(null) столбец как StartDate в одной из моих табличных схем. Клиенты уже ввели много данных в свою таблицу на основе этого. Теперь они хотят, чтобы эта колонка имела тип Character(10) Можно ли это сделать? Разве это не повредит данные, которые они уже ввели? Что такое безопасный способ сделать это?Изменение типа данных столбца в SQL

+0

Что такое 'Character (10)'? – Amit

+0

вы можете играть, вставляя в другую таблицу. Я имею в виду одну временную таблицу, а затем, делая бросок, мы можем добиться этого. – pedram

+0

Создайте новый столбец, заполните его необходимыми данными (на основе исходных данных столбца, используя, например, инструкцию 'UPDATE'), удалите старый столбец, переименуйте новый столбец. Может возникнуть проблема из-за различного упорядочения столбцов, если кто-нибудь запросит его, используя '*'. –

ответ

2
SELECT StartDate, CONVERT(CHAR, StartDate, 10) AS NEWOUTPUT 
FROM yourtable 

Если результаты колонки NEWOUTPUT отлично затем идти вперед с ..

alter table yourtable alter column StartDate char(10) not null; 
+0

О, это было интересно, спасибо. – Bohn

+0

Теперь, как мне сделать фактическое преобразование? Благодарю. – Bohn

+0

@Bohn обновленный ответ – Matt

1

Прямое изменение может привести к неприятностям. Вы должны были бы

  1. Создать новый столбец
  2. Обновить таблицу так, что новый столбец заполнен YEAR(datecolname) + '-' + MONTH(datecolname) + '-' + DAY(datecolname).
  3. Удалить старую колонку
  4. Переименуйте новый столбец старого имени
  5. воссоздавать индексы

Одна вещь, хотя в том, что поиски конкретных дат, вероятно, будет медленнее, в любом случае, если вы используете символ вместо datetime и конкретных операторов sql, таких как «между», больше не будет работать.

Если это так, как вы упомянули в комментарии, потому что они не хотят вводить день, то, вероятно, лучше изменить, как им нужно вводить даты, чтобы день по умолчанию был установлен на 1. Но зависит от рассматриваемого приложения.

Смежные вопросы