SQL - Informix - 将列的数据类型从numeric更改为character

时间:2009-02-10 19:49:06

标签: sql types informix alter

我有一个临时表,在一列中有数字整数值。我想要根据某些条件用字符值替换整数值,或者我想添加另一列字符类型,根据某些条件自动将值插入自身。

如果x <= 1,则更改为“SP”或创建新列并在该行中存储“SP” 如果x> 1,更改为“FA”或创建新列并在该行中存储“FA”

另外,在我的Informix版本的临时表中不允许使用alter命令。

3 个答案:

答案 0 :(得分:1)

SELECT id,yr,CASE WHEN yr_offset&lt; = 1那么“SP”ELSE“FA”END CASE

http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm

答案 1 :(得分:1)

你是对的,你不能改变临时表。使用此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, ...

More details on CASE syntax from the manual

答案 2 :(得分:0)

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;