SQL - Informix - Изменение типа данных столбца с числового на символьный
Вопрос
У меня есть временная таблица, содержащая целочисленные значения в одном столбце.Я хочу либо заменить целочисленные значения символьными значениями на основе некоторых критериев, либо добавить еще один столбец символьного типа, который автоматически вставляет в себя значения на основе некоторых критериев.
Если x <= 1, измените на «SP» или создайте новый столбец и сохраните «SP» в этой строке.
Если x > 1, измените на «FA» или создайте новый столбец и сохраните «FA» в этой строке.
Кроме того, в моей версии Informix команды изменения не разрешены для временных таблиц.
Решение
ВЫБЕРИТЕ идентификатор, год, CASE WHEN yr_offset <= 1 THEN "SP" ELSE "FA" END CASE
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm
Другие советы
Вы правы, вы не можете изменить временную таблицу.Добавление дополнительного столбца с этим производным значением можно выполнить с помощью CASE
заявление, то есть:
SELECT enroll.ud, enroll.yr, (CASE
WHEN enrollsess.yr_offset <=1 THEN "FA"
ELSE "SP" END)::CHAR(2) AS sess, ...
Приведение (т.е. круглые скобки и ::CHAR(2)
), вероятно, не нужны.
Если логика может быть выражена как нулевая/ненулевая (в вашем примере неясно, может ли yr_offset быть отрицательным), то все еще проще:
SELECT enroll.id, enroll.yr,
DECODE(enrollsess.yr_offset, 0, "FA", "SP")::CHAR(2) AS sess, ...
Более подробная информация о синтаксисе CASE приведена в руководстве.
SELECT enrollsess.id,
enrollsess.yr,
"SP" sess
FROM enrollsess
WHERE enrollsess.yr_offset <= 1
UNION
SELECT enrollsess.id,
enrollsess.yr,
"FA" sess
FROM enrollsess
WHERE enrollsess.yr_offset > 1
INTO TEMP enrollsess2 WITH NO LOG;