大家帮忙解释下这个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)的长度,结果显示*,表示数据转换由于长度不足出现的问题
------解决方案--------------------
海爷
select ISNULL(NULLIF(Rtrim(ltrim(' ')),''),'999999')返回的是‘9999’