SQL:列<>'*。*'是什么意思?

时间:2018-06-28 07:56:30

标签: sql oracle

我有一个现有代码,可以在表的where条件下面找到。

SELECT * FROM MYTABLE WHERE MYCOLUMN <> '*.*';

MYCOLUMN <> '*.*'MYCOLUMN <> '*'之间是否有区别;

MYCOLUMN <> '*.*'是什么意思?

3 个答案:

答案 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 <> '*'之间有区别吗?

SQL Fiddle

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