SQL - Informix - Cambiar el tipo de datos de una columna de numérico a carácter
Pregunta
Tengo una tabla temporal que tiene valores numéricos enteros en una columna.Quiero reemplazar los valores enteros con valores de caracteres según algunos criterios o quiero agregar otra columna de tipo de carácter que inserte valores automáticamente en sí misma según algunos criterios.
Si x <= 1, cambie a "SP" o cree una nueva columna y almacene "SP" en esa fila
Si x > 1, cambie a "FA" o cree una nueva columna y almacene "FA" en esa fila
Además, los comandos de modificación no están permitidos en tablas temporales en mi versión de Informix.
Solución
SELECT id, yr, CASE CUANDO yr_offset <= 1 entonces "SP" ELSE "FA" END CASE
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm
Otros consejos
Tiene razón, no se puede modificar una tabla temporal. Adición de una columna adicional con este valor derivado se puede hacer con una declaración CASE
, es decir:
SELECT enroll.ud, enroll.yr, (CASE
WHEN enrollsess.yr_offset <=1 THEN "FA"
ELSE "SP" END)::CHAR(2) AS sess, ...
la pieza de fundición (es decir, los paréntesis y ::CHAR(2)
) probablemente no son necesario.
Si la lógica se puede expresar como / no-cero cero (no es claro en su ejemplo, si yr_offset puede ser negativo), entonces es aún más simple:
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;