多级别强制转型

多级别强制转型是指这样的操作:它要求在表达式中进行两个或更多个级别的强制转型,以将一种数据类型的值转换为目标数据类型。由于 yen 与 sterling 值之间不存在强制转型,所以将两种数据类型作比较的查询要求进行多次强制转型。第一次(内部)强制转型将 sterling 值转换为 dollar 值;第二次(外部)强制转型将 dollar 值转换为 yen 值。
SELECT * FROM manufact_price 
      WHERE japan_price < uk_price::dollar::yen
可以添加另一个强制转型函数以直接处理 yen 到 sterling 的转换。以下示例创建函数 yen_to_sterling() 并将其注册为强制转型。为了考虑汇率,此函数将 yen 值乘以 .01 以派生出等价的 sterling 值。
CREATE FUNCTION yen_to_sterling(y yen) 
      RETURNS sterling 
      RETURN (y::DOUBLE PRECISION * .01)::CHAR(20)::sterling; 
END FUNCTION;

CREATE CAST (yen AS sterling WITH yen_to_sterling); 
添加了 yen 到 sterling 的强制转型之后,可使用单级别强制转型来对 yen 和 sterling 值作比较,如以下查询所示:
SELECT japan_price::sterling, uk_price FROM manufact_price
      WHERE japan_price::sterling) < uk_price;

在 SELECT 语句中,显式强制转型返回 yen 值作为它们的 sterling 等价值。在 WHERE 子句中,强制转型允许对 yen 和 sterling 值作比较。