Declare @Var1 Varchar(5) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'
SELECT ISNULL(@Var1, @Var2) AS Result
我除了结果是'ABCDEFGHIJ'
,但结果是'ABCDE'
。SQL Server 2014中的ISNULL()函数表现异常
这是该函数的正常行为还是我错过了什么?
Declare @Var1 Varchar(5) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'
SELECT ISNULL(@Var1, @Var2) AS Result
我除了结果是'ABCDEFGHIJ'
,但结果是'ABCDE'
。SQL Server 2014中的ISNULL()函数表现异常
这是该函数的正常行为还是我错过了什么?
使用COALESCE功能:不知道为什么ISNULL返回类似这样的输出,但假设在检查ISNULL(p1,p2)
将只考虑第一个参数的大小。
SELECT COALESCE(@Var1, @Var2) AS Result
那是因为你的源变量的长度是5,因此它已被截断,另一部分
Declare @Var1 Varchar(10) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'
SELECT ISNULL(@Var1, @Var2) AS Result
您已经使用VARCHAR(5)这就是为什么发生这种情况之下
使用
Declare @Var1 Varchar(50) = Null
这会给你预期的答案
您应该使用3210函数,因为Coalesce()
函数返回其参数中的第一个非空值。
SELECT COALESCE(@Var1, @Var2) AS Result
或者您可以更改所声明变量的大小。两者都会给你预期的产出。
要回答你的问题,是的,这是ISNULL
的正常行为。它采用第一个表达式的类型。
参考这里https://msdn.microsoft.com/en-us/library/ms184325.aspx
如果不是,则返回NULL check_expression的价值; 否则,在隐式地将 转换为check_expression类型后,如果类型不同,则返回replacement_value。 如果replacement_value长于 check_expression,则可以截断replacement_value。
作为替代,你应该宁愿使用COALESCE
ISNULL(@Var1, @Var2)
语句将副本@Var2
到@var1
如果@var1
值为null,而@var1
长度为5
,这就是为什么它是只显示前五个字符。
http://stackoverflow.com/documentation/sql-server/5044/nulls/25800/coalesce#t=201703030715583559345 – Yahfoufi