为什么"SELECT ISNULL(LEFT(NULL, 8), '1234567890')"的结果返回为'1'而不是"1234567890"?



我有这个查询

SELECT ISNULL(LEFT(NULL, 8), '1234567890')

我得到的结果是"1"而不是"1234567890"。我错过了什么?

我正在使用 SQL Server 2014。

ISNULL 和 COALESCE 之间的一个区别是,ISNULL 将参数的长度限制为第一个参数的长度,而 COALESCE 则不会。 尝试以下操作以了解差异

DECLARE @i AS VARCHAR(4) = NULL, 
        @j AS VARCHAR(6) = 'abcdefg' 
SELECT ISNULL(@i, @j)
SELECT COALESCE (@i, @j)

要将结果的长度限制为 8 个字符,您需要

SELECT ISNULL(cast(NULL as varchar(8)), '1234567890') ;

ISNULL 结果的数据类型是使用第一个参数推断的。

最新更新