Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 像“%”这样使用是否与说“不为空”相同?_Sql_Oracle - Fatal编程技术网

Sql 像“%”这样使用是否与说“不为空”相同?

Sql 像“%”这样使用是否与说“不为空”相同?,sql,oracle,Sql,Oracle,如果不是,为什么会有人使用像“%”这样的abc 只是测试一下 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; selec

如果不是,为什么会有人使用像“%”这样的abc

只是测试一下

  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的大多数东西一样,直接比较不会看到空值。。。如果要检测NULL,则use为NULL。如果要排除NULL,请清除,并且include不为NULL。。即使像这样的东西看起来像它消除了它;通过使用IS NOT NULL,任何阅读代码的人都会更加清楚

相关链接:


模式中的百分号%可以匹配零个或多个字符,而不是值中多字节字符集中的字节。模式“%”不能与null匹配。

有效地说,是的。我见过当人们想要传递一个相似的条件参数时使用它,这样他们就可以将一个特定的值、一个部分值或无值传递到一个查询中,该查询的形式是select。。。从…起其中一些列如:一些参数


埃塔:我要指出的是,如果我看到生产代码中某些列(如“%”)的位置,而编写它的人实际上意味着某些列不为空,我想我会有很多话要对他们说!后一种情况更具自我描述性,其意图也更清晰,不会让人们挠头,怀疑人们在写它时在想什么

在超过一百万行的大型表中测试这一点,您还可以看到执行类似“%”的操作的性能也要差得多。它们可能碰巧在功能上是等价的,但进行不必要的文本比较的成本要高得多。@HepC:Agreed-这就是为什么我指出他应该使用is NOT NULL来检查而不是“%”;谢谢大家,这就是我想的,但我有一个测试用例告诉我,like%比is not null表现得更好,所以我只是想看看我是否遗漏了什么……再次感谢!