Sql “为什么是”的结果;选择ISNULL(左(NULL,8)和1234567890';);返回为';1';而不是';1234567890';?

Sql “为什么是”的结果;选择ISNULL(左(NULL,8)和1234567890';);返回为';1';而不是';1234567890';?,sql,sql-server,Sql,Sql Server,我有这个疑问 SELECT ISNULL(LEFT(NULL, 8), '1234567890') 我得到的结果是“1”,而不是“1234567890”。我错过了什么 我正在使用SQL Server 2014。将结果长度限制为所需的8个字符 SELECT ISNULL(cast(NULL as varchar(8)), '1234567890') ; ISNULL结果的数据类型是使用第一个参数推断出来的。ISNULL和COALESCE之间的一个区别是,ISNULL将参数长度限制为第一个参数的

我有这个疑问

SELECT ISNULL(LEFT(NULL, 8), '1234567890')
我得到的结果是“1”,而不是“1234567890”。我错过了什么


我正在使用SQL Server 2014。

将结果长度限制为所需的8个字符

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

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

ISNULL和COALESCE之间的一个区别是,ISNULL将参数长度限制为第一个参数的长度,而COALESCE不会。尝试下面的方法来了解区别

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

SELECT ISNULL(@i, @j)
SELECT COALESCE (@i, @j)

可能一些隐式类型转换到
varchar(1)
char(1)
使用coalesce,它将返回值