Comment une sous-string d'une variable varchar peut-elle être nulle?

Principalement comme un user de SQL Server, j'ai été surpris que dans Oracle cette syntaxe est valide:

select var from table where substr(var, 2, 1) is null 

Comment une variable de la variable varchar peut-elle être null ? Dans SQL Server, cela ne serait jamais vrai (?).

 select var from table where subssortingng(var, 2, 1) is null 

Dans la plupart des cas, dans Oracle, la string vide est en fait NULL .

Si vous utilisez substr () en dehors de la plage de votre string, SQL Server renvoie la string vide, tandis que Oracle renvoie NULL (son équivalent à la string vide).

En général, null signifie absence de valeur.

 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 ssortingng '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' 

Mise à jour: Il est clair un choix de mise en œuvre. Dans la plupart des langues, par exemple en Java, les strings sont placées dans une zone de memory et, pour le programmeur, les variables de string sont des references à la zone dans la memory. Ainsi, une string vide est une reference à une zone de longueur 0, mais la reference n'est pas nulle. Donc, null est une chose différente (pas de reference) et je pense comme vous: c'est mieux.