在单值类型与其源类型之间强制转型

虽然具有单值类型的数据与该单值类型的源类型具有相同的表示法,但单值类型不能直接与其源类型进行比较。因此,创建单值数据类型时,GBase 8s 自动注册下列显式强制转型:
  • 从单值类型到其源类型的强制转型
  • 从源类型到单值类型的强制转型
假定创建两个单值类型:一个用于处理电影字幕,另一个用于处理音乐录音。可以创建下列基于 VARCHAR 数据类型的单值类型:
CREATE DISTINCT TYPE movie_type AS VARCHAR(30);
CREATE DISTINCT TYPE music_type AS VARCHAR(30);
然后,可以创建 entertainment 表,它包含类型为 movie_typemusic_type 和 VARCHAR 的列。
CREATE TABLE entertainment 
( 
video         movie_type,
compact_disc  music_type,
laser_disv    VARCHAR(30)
);
要将单值类型与其源类型作比较(反之亦然),必须执行从一种数据类型到另一数据类型的显式强制转型。例如:假定您想要查找同时提供了录影带和激光影碟的电影。以下语句要求在 WHERE 子句中指定显式强制转型,以将具有单值类型 (music_type) 的值与具有其源类型 (VARCHAR) 的值作比较。在本示例中,将源类型显式地强制转型为单值类型。
SELECT video FROM entertainment
      WHERE video = laser_disc::movie_type
然而,还可以显式地将单值类型强制转型为源类型,如以下语句所示:
SELECT video FROM entertainment
      WHERE video::VARCHAR(30) = laser_disc
要在对同一源类型定义的两个单值类型之间执行转换,必须先执行中间强制转型以转换回源类型,然后再强制转型为目标单值类型。以下语句将 music_type 的值与 movie_type 的值作比较:
SELECT video FROM entertainment
      WHERE video = compact_disc::VARCHAR(30)::movie_type