2009-02-10 312 views
1

我有一個臨時表,其中一列有數字整數值。我想要根據某些條件用字符值替換整數值,或者我想添加另一個字符類型的列,它會根據某些條件自動將值插入到自身中。SQL - Informix - 將數據的數據類型從數字更改爲字符

如果x < = 1,切換到「SP」或該行中做出新的列和存儲「SP」
如果x> 1時,變更爲「FA」,或進行在該新的列和存儲「FA」行

另外,在我的Informix版本的臨時表中不允許使用alter命令。

+0

它有助於指定IDS的版本 - 或其他Informix數據庫服務器 - 特別是如果您不得不提及「在我的版本中」。 – 2009-02-11 01:40:48

+0

我不必提及,我不認爲 - 我如何獲得版本?似乎沒有人知道它,並且我們的手冊已經過時 – CheeseConQueso 2009-02-12 21:27:53

回答

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; 
+0

難道您沒有完成CASE語句嗎? – avgbody 2009-02-10 20:19:29

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

相關問題