如何在 Oracle 中执行不区分大小写的搜索?

oraclesoftware & codingprogramming更新于 2025/6/2 19:52:17

问题:

您想在 Oracle 中执行不区分大小写的搜索。

解决方案

处理大小写问题的一种方法是使用内置的 UPPER 和 LOWER 函数。这些函数允许您在单个操作中强制对字符串进行大小写转换

示例

DECLARE    full_name1  VARCHAR2(30) := 'roger federer';    full_name2   VARCHAR2(30) := 'ROGER FEDERER'; BEGIN    IF LOWER(full_name1) = LOWER(full_name2) THEN        DBMS_OUTPUT.PUT_LINE( full_name1 || ' and ' || full_name2 || ' are the same.');    END IF; END;

在上面的例子中,full_name1 和 full_name2 首先转换为小写,然后进行比较,得到输出结果

roger federer 和 ROGER FEDERER 是相同的。

UPPER 和 LOWER 函数有一个缺点,那就是性能。任何应用于字段的函数都会降低性能。

从 Oracle Database 10g Release 2 开始,您可以使用初始化参数 NLS_COMP 和 NLS_SORT 使所有字符串比较不区分大小写。

我们需要将 NLS_COMP 参数设置为 LINGUISTIC,这将指示数据库使用 NLS_SORT 进行字符串比较。然后,我们将 NLS_SORT 设置为不区分大小写的设置,例如 BINARY_CI。

默认情况下,NLS_COMP 设置为 BINARY。我们可以使用 LEAST 函数来查看大写字母的排序是否低于小写字母,反之亦然。

示例

SELECT LEAST ('ROGER FEDERER','roger federer') FROM Dual;

上述 SQL 返回"ROGER FEDERER"告诉我们大写字符的排序比小写字符低。

现在,我们将设置几个参数。

  1. 设置 NLS_COMP 以指定语言排序。
  2. 设置 NLS_SORT 以指定我们想要的排序规则。

示例

ALTER SESSION SET NLS_COMP=LINGUISTIC ALTER SESSION SET NLS_SORT=BINARY_CI

在我们将上述设置设置到会话后,我们将再次调用 LEAST 来查看它返回的内容。

示例

 SELECT LEAST ('ROGER FEDERER','roger federer') FROM dual;

输出

roger federer

最后,我们将调用上面的 pl/sql 块,但不应用 UPPER 和 LOWER 函数来比较字符串。

示例

DECLARE    full_name1  VARCHAR2(30) := 'roger federer';    full_name2   VARCHAR2(30) := 'ROGER FEDERER'; BEGIN    IF full_name1 = full_name2 THEN        DBMS_OUTPUT.PUT_LINE( full_name1 || ' and ' || full_name2 || ' are the same.');    END IF; END;

roger federer 和 ROGER FEDERER 是一样的。

设置将保留,直到您关闭会话。


相关文章