题
在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错误?
不隶属于 StackOverflow