在Informix中投射

pullam 发布于 2018-05-12 casting 最后更新 2018-05-12 15:37 87 浏览

在Informix中,如何将char(8)类型转换为money类型,以便将其与另一个money类型进行比较? 使用“tblAid.amt::money as aid_amt”不起作用。 使用“(tblAid.amt * 1) AS aid_amt”不起作用。

已邀请:

svero

赞同来自:

试试这个 - >

select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;
您可以将数量作为数字进行比较。

xid

赞同来自:

自从我用informix玩了一段时间以来,我一直都很忙,现在我还没有正在运行的实例。但是,这里有两件事会导致问题: 1),因为它是一个char(8),它可以包含无法在没有“清理”的情况下转换为数字的值。例如。 “ABC”。或“1,234,567.00”。
2)尾随空格。 (与varchar相对的char)。 什么informix错误你会得到你的显式演员(::钱)?

gnihil

赞同来自:

第一个问题 - 为什么你不在数字列中存储数值?这会让你的问题的其余部分没有意义。这也意味着你的系统将表现更好。当你需要存储数据值时,使用明显的类型;除非数据是字符串,否则不要使用字符串类型。 如前所述,您可以使用非标准的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在这种情况下可能比较明智 - 但首先避免使用正确类型进行投射更为明智。