3

在 Informix 中,如何将char(8)类型转换为money类型,以便可以将其与另一种money类型进行比较?

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

4

3 回答 3

5

试试这个 -->

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;

您可以将金额作为数字进行比较。

于 2008-10-09T04:01:45.187 回答
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 可能更明智——但首先通过使用正确的类型来避免强制转换的需要仍然更明智。

于 2008-10-09T18:43:51.223 回答
1

自从我玩过 informix 以来已经有一段时间了,目前我手边没有一个正在运行的实例。但是,这里有两件事可能会导致问题:

1) 因为它是一个 char(8),所以它可以包含在没有一点“清理”的情况下无法转换为数字的值。例如“abc”。或“1,234,567.00”。
2) 尾随空格。(char 与 varchar 相对)。

您在显式演员 (::money) 中遇到什么 informix 错误?

于 2008-10-09T04:18:08.600 回答