在Informix中,如何将char(8)
类型转换为money
类型,以便我可以将其与另一个money
类型进行比较?
使用“tblAid.amt::money as aid_amt
”无效。
使用“(tblAid.amt * 1) AS aid_amt
”无效。
答案 0 :(得分:5)
试试这个 - >
select (disb_amt::NUMERIC) disb_amt from tmp_kygrants;
您可以将金额作为数字进行比较。
答案 1 :(得分: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可能更明智 - 但是首先使用正确的类型避免使用强制转换更为明智。
答案 2 :(得分:1)
1)因为它是一个char(8),所以它可以包含在没有“清理”的情况下无法转换为数字的值。例如。 “ABC”。或“1,234,567.00” 2)尾随空间。 (char而不是varchar)。
你在显式演员(:: money)上得到什么informix错误?