虽然具有单值类型的数据与该单值类型的源类型具有相同的表示法,但单值类型不能直接与其源类型进行比较。因此,创建单值数据类型时,
GBase 8s 自动注册下列显式强制转型:
- 从单值类型到其源类型的强制转型
- 从源类型到单值类型的强制转型
假定创建两个单值类型:一个用于处理电影字幕,另一个用于处理音乐录音。可以创建下列基于 VARCHAR 数据类型的单值类型:
CREATE DISTINCT TYPE movie_type AS VARCHAR(30);
CREATE DISTINCT TYPE music_type AS VARCHAR(30);
然后,可以创建
entertainment 表,它包含类型为
movie_type、
music_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