我有一个现有代码,可以在表的where条件下面找到。
SELECT * FROM MYTABLE WHERE MYCOLUMN <> '*.*';
MYCOLUMN <> '*.*'
和MYCOLUMN <> '*'
之间是否有区别;
MYCOLUMN <> '*.*'
是什么意思?
答案 0 :(得分:5)
MYCOLUMN <> '*.*'
和MYCOLUMN <> '*'
之间有区别
是的,您正在将不同的文本文字与an inequality comparison condition进行比较。
*
没有特殊含义。具体来说,它不是通配符。从模式看来,也许您的列中包含文件名,稍后您将在OS级别对值进行一些处理,这些值可能是通配符。对于实际的查询来说不是。
<>
与!=
相同,因此您要查找其中列的全部内容不是文字字符串{{1}的行。 },或者在第二种情况下列的全部内容不是文字字符串'*.*'
时。除null以外,没有值可以同时满足这两个条件。 (而且null也不真正匹配-因为它不等于或不等于任何东西;但是比较的结果是'unknown',所以它不包含在结果集中)。
作为演示:
'*'
在第一个条件下,仅ID 3和8被排除(3是因为条件为真,8是因为未知):
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);
在第二种情况下,仅ID 1和ID 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.
答案 1 :(得分:4)
MYCOLUMN <> '*.*'
是什么意思?
如果MYCOLUMN
中的值不是确切的字符串'*.*'
也不是NULL
,则将通过该条件进行匹配。
*
不是通配符。
MYCOLUMN <> '*.*'
和MYCOLUMN <> '*'
之间有区别吗?
Oracle 11g R2架构设置:一些测试数据:
CREATE TABLE table_name ( mycolumn ) AS
SELECT '*' FROM DUAL UNION ALL
SELECT '*.*' FROM DUAL UNION ALL
SELECT 'a.b' FROM DUAL UNION ALL
SELECT 'a' FROM DUAL UNION ALL
SELECT NULL FROM DUAL;
查询1 :
SELECT *
FROM table_name
WHERE MYCOLUMN <> '*.*'
Results :匹配所有与'*.*'
或NULL
不同的行。
| MYCOLUMN |
|----------|
| * |
| a.b |
| a |
查询2 :
SELECT *
FROM table_name
WHERE MYCOLUMN <> '*'
Results :匹配所有与'*'
或NULL
不同的行。
| MYCOLUMN |
|----------|
| *.* |
| a.b |
| a |
查询3 :如果要在比赛中使用通配符,请使用LIKE
运算符和%
作为通配符(而不是*
)。
SELECT *
FROM table_name
WHERE MYCOLUMN NOT LIKE '%.%'
Results :匹配所有非NULL
且不包含.
字符的值:
| MYCOLUMN |
|----------|
| * |
| a |
查询4 :
SELECT *
FROM table_name
WHERE MYCOLUMN NOT LIKE '%'
Results :匹配所有非NULL
且不包含零个或多个字符的值(此值将永远不匹配)。
No data found.
答案 2 :(得分:0)
条件在哪里
MYCOLUMN <> '*.*'
专门搜索与'*.*'
不同的文本。此搜索将包括'*'
,因为'*'
与'*.*'
不同。
where条件不检查正则表达式或通配符。
要使用*
搜索文本以查找文本,可以使用类似条件-https://docs.oracle.com/cd/B13789_01/server.101/b10759/conditions016.htm。