CASE 表达式数据类型兼容性

在 CASE 表达式中,所有的结果都应为同一数据类型或可兼容的数据类型。

如果在所有 WHEN ... THEN 分支子句中的结果不是同一数据类型或兼容的数据类型,则发生错误。

下表展示哪些字符数据类型是兼容的,以及为每一组合返回的数据类型。

表 1. 从兼容的字符数据类型返回的数据类型
数据类型 NCHAR (>255) NCHAR (<=255) NVARCHAR CHAR (<=255) CHAR (>255) VARCHAR LVARCHAR (>255) LVARCHAR (<=255)
NCHAR (>255) NCHAR NCHAR NCHAR NCHAR NCHAR NCHAR NCHAR NCHAR
NCHAR (<=255) NCHAR NCHAR NVARCHAR NCHAR NCHAR NVARCHAR NCHAR NCHAR
NVARCHAR NCHAR NVARCHAR NVARCHAR NVARCHAR NCHAR NVARCHAR NCHAR NVARCHAR
CHAR (<=255) NCHAR NCHAR NVARCHAR CHAR CHAR VARCHAR CHAR CHAR
CHAR (>255) NCHAR NCHAR NCHAR CHAR CHAR CHAR CHAR CHAR
VARCHAR NCHAR NVARCHAR NVARCHAR VARCHAR CHAR VARCHAR CHAR VARCHAR
LVARCHAR (>255) NCHAR NCHAR NCHAR CHAR CHAR CHAR LVARCHAR LVARCHAR
LVARCHAR (<=255) NCHAR NCHAR NVARCHAR CHAR CHAR VARCHAR LVARCHAR LVARCHAR

下表展示哪些数值数据类型是兼容的,以及为每一组合返回的数据类型。

表 2. 从可兼容的数值数据类型返回的数据类型
数据类型 INTEGER SMALLINT SERIAL DECIMAL FLOAT SMALLFLOAT MONEY BIGINT BIGSERIAL
INTEGER INTEGER INTEGER INTEGER DECIMAL DECIMAL DECIMAL MONEY DECIMAL DECIMAL
SMALLINT INTEGER SMALLINT INTEGER DECIMAL DECIMAL DECIMAL MONEY DECIMAL DECIMAL
SERIAL INTEGER INTEGER SERIAL DECIMAL DECIMAL DECIMAL MONEY DECIMAL DECIMAL
DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL MONEY DECIMAL DECIMAL
FLOAT DECIMAL DECIMAL DECIMAL DECIMAL FLOAT FLOAT MONEY DECIMAL DECIMAL
SMALLFLOAT DECIMAL DECIMAL DECIMAL DECIMAL FLOAT SMALLFLOAT MONEY DECIMAL DECIMAL
MONEY MONEY MONEY MONEY MONEY MONEY MONEY MONEY MONEY MONEY
BIGINT DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL MONEY BIGINT BIGINT
BIGSERIAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL MONEY BIGINT BIGSERIAL