使用像'%'一样说“IS NOT NULL”吗?

时间:2015-03-03 16:04:25

标签: sql oracle

如果没有,为什么有人会使用abc,比如'%' ?

2 个答案:

答案 0 :(得分:4)

试试吧?

  drop table junk;

  create table junk ( id  number, col  varchar2(10) );

  insert into junk values ( 123, null );
  insert into junk values ( 234, ' ' );
  insert into junk values ( 345, 'asdf' );

  commit;

  select *
    from junk
   where col like '%'
  /

          ID COL
  ---------- ----------
         234
         345 asdf

所以不,就像大多数Oracle一样,direct compare不会看到NULL ...如果要检测NULL,请使用IS NULL。如果你想要排除NULL,请清除,并包括IS NOT NULL ..(即使这样的东西“看起来像”它也会消除它);)通过使用“IS NOT NULL”,任何阅读它的人都会更清楚代码。

相关链接: http://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions007.htm#SQLRF52142

模式中的百分号(%)可以匹配值中的零个或多个字符(而不是多字节字符集中的字节)。 模式'%'无法匹配null。

答案 1 :(得分:3)

有效,是的。我已经看到它在人们想要传入类似条件参数时使用,以便它们可以将特定值,部分值或无值传递到select ... from ... where some_col like :some_parameter形式的查询中。

ETA:我想指出,如果我在制作代码中看到where some_col like '%',那么编写它的人真的意味着where some_col is not null我想我会有很多话要对他们说!后一种情况更具有自我描述性和清晰的意图,并且不会让人们摸不着头脑,想知道这个人写作时的想法是什么!