2008-10-07 74 views
2

在Informix中,如何將char(8)類型轉換爲money類型,以便我可以將其與另一個money類型進行比較?在Informix中鑄造

使用「tblAid.amt::money as aid_amt」不起作用。 使用「(tblAid.amt * 1) AS aid_amt」不起作用。

+1

您正在使用哪個版本的Informix? (你應該總是這樣說,因爲答案可能會與你的系統有所不同,答案會隨着時間的推移而改變 - 如果你使用的是IDS 7.31,那麼沒有任何鑄造符號會起作用。) – 2008-10-09 20:44:06

回答

5

試試這個 - >

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants; 

您可以對金額進行比較,如數字。

+0

括號應該是多餘的,但是無害的。 – 2008-10-09 20:44:50

1

自從我玩弄informix以來,我已經有一段時間了,我現在沒有一個方便的實例。但是,這裏有兩件事會導致問題:

1)因爲它是一個char(8),它可以包含無法在沒有「清理」的情況下轉換爲數值的值。例如。 「ABC」。或「1,234,567.00」。
2)尾隨空格。 (與varchar相反的char)。

什麼informix錯誤你會得到你的顯式演員(::錢)?

5

第一個問題 - 爲什麼地球上不存儲數值列中的數值?這會讓你的問題的其餘部分沒有意義。這也意味着你的系統將表現更好。當你需要存儲數據值時,使用明顯的類型;除非數據是字符串,否則不要使用字符串類型。

如前所述,您可以使用非標準的Informix轉換符號:

SELECT some_column::MONEY FROM WhereEver; 

您也可以更小心投型 - 用MONEY(8,2)爲例。您也可以使用標準表示法:

SELECT CAST(some_column AS MONEY(8,2)) FROM WhereEver; 

這假設您使用的是IDS 9.x或更高版本 - 舊產品根本不支持轉換。但是,一般來說,Informix自動完成轉換(例如,將數字轉換爲字符串)非常好。然而,字符串按照字典順序而不是數字順序進行比較,因此CAST在這種情況下可能比較明智 - 但首先避免使用正確類型進行投射更爲明智。