Oracle中是否会包括空值(oracle中%包括空吗)

Oracle中%是否会包括空值?

在Oracle中,%是用于模糊匹配的通配符之一,代表任意字符,包括字母、数字、符号等等。在使用%匹配时,有一种情况需要特别注意:是否会包括空值?

我们可以先创建一个简单的表来测试一下%是否会包括空值。在Oracle中,可以使用以下语句创建一个包含空值的表。

CREATE TABLE test_table (
id NUMBER,
name VARCHAR2(10)
);

INSERT INTO test_table VALUES (1, 'Tom');
INSERT INTO test_table VALUES (2, NULL);
INSERT INTO test_table VALUES (3, 'Jerry');

上述SQL语句创建了一个名为test_table的表,其中包含三条记录。第二条记录的name字段为空值,即为NULL。现在我们可以测试一下%是否会包括空值。

SELECT * FROM test_table WHERE name LIKE '%';

执行上述SQL语句后,会得到如下结果:

| ID | NAME |

|—-|——-|

| 1 | Tom |

| 3 | Jerry |

可以看出,结果集只包含id为1和3的记录,而不包括id为2的记录。这是因为Oracle中%匹配时,不会包括空值。如果想要匹配空值,需要使用另一个通配符:_(下划线)。

SELECT * FROM test_table WHERE name LIKE '_';

执行上述SQL语句后,会得到如下结果:

| ID | NAME |

|—-|——|

| 2 | null |

可以看出,结果集只包含id为2的记录,因为只有第二条记录的name字段为空值(NULL),符合_匹配的条件。

虽然%匹配时不包括空值,但在某些情况下,我们仍然需要使用%匹配,比如查询所有name字段不为空的记录。这时可以使用IS NOT NULL条件进行过滤。

SELECT * FROM test_table WHERE name LIKE '%'
AND name IS NOT NULL;

执行上述SQL语句后,会得到如下结果:

| ID | NAME |

|—-|——|

| 1 | Tom |

| 3 | Jerry |

这里在%匹配的基础上,又添加了一个过滤条件:name字段不为空。这样可以同时满足模糊匹配和过滤空值的需求。

综上所述,Oracle中%匹配时不包括空值,如果需要匹配空值,可以使用_(下划线)通配符。在使用%模糊匹配时,可以通过添加过滤条件来同时处理空值的情况。


数据运维技术 » Oracle中是否会包括空值(oracle中%包括空吗)