作为SQL Server用户,我很惊讶在Oracle中这种语法是有效的:
select var
from table
where substr(var, 2, 1) is null
如何从varchar字符串变量转换为null
?在SQL Server中,这永远不会成立(?)。
select var
from table
where substring(var, 2, 1) is null
答案 0 :(得分:4)
在Oracle的许多情况下,the empty string is actually NULL。
如果你的in-string范围之外的substr(),SQL服务器返回空字符串,而Oracle返回NULL(它相当于空字符串)。
答案 1 :(得分:1)
一般来说,null
表示没有价值。
select substr ('abcd',2, 1) from dual;
-- result: 'b'
select substr ('a',2, 1) from dual;
-- empty, because there is nothing at second position on string 'a';
select decode(substr('a',2,1),null, 'yes, is null') from dual;
-- result: 'yes, is null'
select decode('', null, 'yes, is null') from dual;
-- result: 'yes, is null'
更新: 很明显是实施的选择。 在大多数语言中,例如在Java中,字符串放在存储区中,对于程序员,字符串变量是对存储器中区域的引用。因此,空字符串是对长度为0的区域的引用,但引用不为空。所以,null是一个不同的东西(没有参考),我想像你一样:它更好。