SQL - Informix - Alterar o tipo de dados de uma coluna de numérico para personagem
Pergunta
I tem uma tabela de temperatura que tem valores inteiros numéricos em uma coluna. Eu quero substituir os valores inteiros com valores de caractere com base em alguns critérios ou eu quero adicionar outra coluna de tipo de caractere que insere automaticamente os valores em si com base em alguns critérios.
Se x <= 1, mude para "SP" ou fazer nova coluna e loja de "SP" nessa linha
Se x> 1, mude para "FA" ou fazer nova coluna e armazenar "FA" nessa linha
Além disso, os comandos alter não são permitidos em tabelas temporárias na minha versão do Informix.
Solução
SELECT id, yr, CASO QUANDO yr_offset <= 1 então "SP" else "FA" END CASE
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm
Outras dicas
Você está correto, você não pode alterar uma tabela temporária. Adicionando uma coluna extra com este valor derivado pode ser feito com uma declaração CASE
, ou seja:
SELECT enroll.ud, enroll.yr, (CASE
WHEN enrollsess.yr_offset <=1 THEN "FA"
ELSE "SP" END)::CHAR(2) AS sess, ...
O casting (ou seja, os parênteses e ::CHAR(2)
) provavelmente não são necessárias.
Se a lógica pode ser expressa como zero / não-zero (não está claro no seu exemplo se yr_offset pode ser negativo), então é ainda mais simples:
SELECT enroll.id, enroll.yr,
DECODE(enrollsess.yr_offset, 0, "FA", "SP")::CHAR(2) AS sess, ...
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;