如何在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',告訴我們大寫字元比小寫字元排序靠前。
現在,我們將設定幾個引數。
- 設定NLS_COMP以指定語言環境排序。
- 設定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是相同的。
這些設定將保持不變,直到您關閉會話。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP