在Informix中,如何将 char(8)类型转换为 money 类型,以便我可以将它与另一个 money 类型?

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

有帮助吗?

解决方案

试试这个 - >

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;

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

其他提示

第一个问题 - 为什么你不在数字列中存储数值?这会使你的其余问题没有实际意义。这也意味着您的系统将表现更好。当您需要存储数据值时,请使用明显的类型;除非数据是字符串,否则不要使用字符串类型。

如前所述,您可以使用非标准的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可能更明智 - 但是首先使用正确的类型避免使用强制转换更为明智。

自从我和informix一起玩的时候已经有一段时间了,我现在还没有运行实例。但是,有两件事可能导致问题:

1)因为它是一个char(8),所以它可以包含在没有“清理”的情况下无法转换为数字的值。例如。 " ABC&QUOT ;.或者“1,234,567.00” 2)尾随空间。 (char而不是varchar)。

你在显式演员(:: money)上得到什么informix错误?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top