我有一个现有的代码,我在下面找到了表上的条件.
SELECT * FROM MYTABLE WHERE MYCOLUMN <> '*.*';
Run Code Online (Sandbox Code Playgroud)
有没有之间的差异MYCOLUMN <> '*.*'和MYCOLUMN <> '*';
什么MYCOLUMN <> '*.*'意思?
有没有之间的差异
MYCOLUMN <> '*.*'和MYCOLUMN <> '*'
是的,您正在将不同的文本文字与不等式比较条件进行比较.
在*没有任何特殊含义.具体来说,它不是通配符.从模式看起来,您的列可能包含文件名,并且您稍后在操作系统级别对值进行一些处理,它们可能是通配符.但实际的查询并不是这样.
它<>是相同的!=,因此您正在寻找列的整个内容不是'*.*'第一种情况下的文字字符串的行,或者列的整个内容不是'*'第二种情况下的文字字符串的行.没有值可以匹配这两个条件,除了null.(并且null也不匹配 - 因为它不等于或不等于任何东西;但是比较的结果是'未知',因此它不包括在结果集中).
作为演示:
create table t42(id number, mycolumn varchar2(20));
insert into t42 (id, mycolumn) values (1, '*');
insert into t42 (id, mycolumn) values (2, 'The*is embedded');
insert into t42 (id, mycolumn) values (3, 'The * is embedded');
insert into t42 (id, mycolumn) values (4, '*.*');
insert into t42 (id, mycolumn) values (5, 'The*.*is embedded');
insert into t42 (id, mycolumn) values (6, 'The *.* is embedded');
insert into t42 (id, mycolumn) values (7, 'No asterisk');
insert into t42 (id, mycolumn) values (8, null);
Run Code Online (Sandbox Code Playgroud)
对于第一个条件,仅排除ID 3和8(3因为条件为真,8因为它是未知的):
select * from t42 where MYCOLUMN <> '*.*';
ID MYCOLUMN
---------- --------------------
1 *
2 The*is embedded
3 The * is embedded
5 The*.*is embedded
6 The *.* is embedded
7 No asterisk
6 rows selected.
Run Code Online (Sandbox Code Playgroud)
对于第二个条件,仅排除ID 1和8:
select * from t42 where MYCOLUMN <> '*';
ID MYCOLUMN
---------- --------------------
2 The*is embedded
3 The * is embedded
4 *.*
5 The*.*is embedded
6 The *.* is embedded
7 No asterisk
6 rows selected.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |