如何在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+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.