varchar变量的子字符串如何为空?

时间:2012-01-28 08:48:19

标签: sql sql-server oracle

作为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

2 个答案:

答案 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是一个不同的东西(没有参考),我想像你一样:它更好。