日期:2014-05-17  浏览次数:20411 次

大家帮忙解释下这个SQL中语句的执行结果啊
环境 SQLServer2008 

①select REPLACE('12',' ',null)
 这个返回 NULL
②select ISNULL(NULLIF(Rtrim(ltrim('    ')),''),999999)
 这个返回 *

为什么?

------解决方案--------------------
replace返回值nvarchar 或 ntext
如果任意参数为 NULL,则返回 NULL。--联机丛书

第二个不详~
------解决方案--------------------
1、REPLACE函数规定:
如果任何一个参数为 NULL,则返回 NULL。

2、Rtrim(ltrim('    '))返回char(4)的'',NULLIF(Rtrim(ltrim('    ')),'')是char(4)的null
   ISNULL(NULLIF(Rtrim(ltrim('    ')),''),999999)隐式转换为
   ISNULL(NULLIF(Rtrim(ltrim('    ')),''),'999999'),由于'999999'超出char(4)的长度,结果显示*,表示数据转换由于长度不足出现的问题


------解决方案--------------------
引用:
1、REPLACE函数规定:
如果任何一个参数为 NULL,则返回 NULL。

2、Rtrim(ltrim('    '))返回char(4)的'',NULLIF(Rtrim(ltrim('    ')),'')是char(4)的null
   ISNULL(NULLIF(Rtrim(ltrim('    ')),''),999999)隐式转换为
   ISN……

海爷
select ISNULL(NULLIF(Rtrim(ltrim('    ')),''),'999999')返回的是‘9999’