在 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 |