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


问题

您想在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数据库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是相同的。

这些设置将保持不变,直到您关闭会话。

更新于: 2020年12月5日

4K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告