在 CASE 表达式中,所有的结果都应为同一数据类型或可兼容的数据类型。
如果在所有 WHEN ... THEN 分支子句中的结果不是同一数据类型或兼容的数据类型,则发生错误。
下表展示哪些字符数据类型是兼容的,以及为每一组合返回的数据类型。
数据类型 | 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 |
下表展示哪些数值数据类型是兼容的,以及为每一组合返回的数据类型。
数据类型 | 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 |