2011-01-25 3 views
3

Я пытаюсь добавить столбец в таблицу, которая должна принимать значение varchar из существующего столбца в таблице и преобразовывать его в int в формате if/then ,Таблицу добавления столбца Alter с данными, заполненными из другого столбца

пример:

if size = d then size_int = 1 
else if size = f then size_int = 2 
else if size = t then size_int = 3 
else if size = s then size_int = 4 
else if size = m then size_int = 5 
else if size = l then size_int = 6 
else if size = h then size_int = 7 
else if size = g then size_int = 8 
else if size = c then size_int = 9 

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

+2

Если эти две колонны собираются, чтобы сохранить эти отношения, вы нарушаете нормальную форму (и хранение полученных данных) с использованием этого макета. Было бы предпочтительнее выводить size_int в VIEW или хранить размер в сопоставлениях size_int в справочной таблице. –

+0

Вау, отредактированный не кем-то, кроме самого Кодирующего Ужаса. –

ответ

3

Попробуйте это:

ALTER TABLE <YOUR_TABLE> ADD size_int INT; 
UPDATE <YOUR_TABLE> SET size_int = 
CASE size 
    WHEN 'd' THEN 1 
    WHEN 'f' THEN 2 
    WHEN 't' THEN 3 
    WHEN 's' THEN 4 
    WHEN 'm' THEN 5 
    WHEN 'l' THEN 6 
    WHEN 'h' THEN 7 
    WHEN 'g' THEN 8 
    WHEN 'c' THEN 9 
    ELSE NULL 
END 
+0

спасибо, это сработало как шарм – goartak

+0

Целью полученных данных было просто выполнить быстрое обновление таблицы, а затем удалить размер col и продолжить движение вперед, используя только size_int. я думал, что это будет самый простой способ сделать это, чтобы написать оператор select, чтобы возвращать размеры в пределах диапазона, т.е. = 3, или между 4 и 6, <5 и т. д. – goartak

+1

Почему бы не отметить, что это правильно, если это сработало;) – JCTLK

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