Oracle 實現查詢不區分大小寫(設置數據庫)


轉http://blog.csdn.net/shl7765856/article/details/7622756

查詢數據的時候。

SQL Server 默認 不區分大小寫。 如果要區分,就要額外的設置。

oracle 默認 區分大小寫。如果不要區分,就要額外的設置。

 

下面就是 Oracle 的明細部分了。

 

首先是測試表/數據

 

SQL> CREATE TABLE tab ( id  INT,val VARCHAR2(10));

 

表已創建。

 

SQL> INSERT INTO tab  values (1, 'ABC123'),(2, 'abc234'),(3, 'Abc345'),(4, 'aBC456'),(5, 'aBc567')

 

已創建5行。

 

 =操作的例子

 

SQL> SELECT * FROM   tab WHERE  val = 'abc123';

無查詢結果

 

SQL> SELECT   *  FROM  tab WHERE   val = 'ABC123'; 

 查詢結果

       ID VAL

---------- ----------

        1 ABC123

 

由上面的結果可以看出,默認情況下,Oracle 大小寫敏感的。

 

下面通過設置環境變量,讓Oracle對大小寫不敏感

SQL> ALTER SESSION SET NLS_COMP=ANSI;

 

會話已更改。

SQL> ALTER SESSION SET NLS_SORT=binary_ci;

 

會話已更改。

SQL> SELECT  *  FROM tab WHERE val = 'abc123';

 

       ID VAL

---------- ----------

        1 ABC123

 

LIKE操作的例子

SQL> SELECT  * FROM tab  WHERE val LIKE 'a%';

       ID VAL

---------- ----------

        2 abc234

        4 aBC456

        5 aBc567

 

默認是大小寫敏感。

 

SQL> ALTER SESSION SET NLS_COMP=ANSI;

會話已更改。

SQL> ALTER SESSION SET NLS_SORT=binary_ci;

會話已更改。

 

會話更改以后,條件是  val = 的,可以實現大小寫不敏感

但是對於 val LIKE 的查詢,還是大小寫敏感的。

 

解決辦法,使用正則表達式的方式來變通的處理。

SQL> SELECT  * FROM   tab  WHERE  REGEXP_LIKE (val, '^a', 'i');

       ID VAL

---------- ----------

        1 ABC123

        2 abc234

        3 Abc345

        4 aBC456

        5 aBc567

 

注1:REGEXP_LIKE 的第3個參數'i' 表示大小寫敏感。

注2:對於環境變量NLS_COMP 與NLS_SORT的設置,會影響REGEXP_LIKE 執行的結果(假如第3個參數不填寫的話)。

 

 

默認情況下:

SQL> SELECT  *  FROM   tab  WHERE  REGEXP_LIKE (val, '^a');

       ID VAL

---------- ----------

        2 abc234

        4 aBC456

        5 aBc567

 

ALTER SESSION SET … 之后

 

SQL> SELECT   *  FROM    tab WHERE  REGEXP_LIKE (val, '^a');

      ID VAL

---------- ----------

        1 ABC123

        2 abc234

        3 Abc345

        4 aBC456

        5 aBc567

 

 

排序的例子

SQL> SELECT  * FROM   Tab ORDER BY val;

       ID VAL

---------- ---------

        1 ABC123

        3 Abc345

        4 aBC456

        5 aBc567

        2 abc234

 

默認排序為大小寫敏感

 

SQL> ALTER SESSION SET NLS_COMP=ANSI;
會話已更改。

SQL> ALTER SESSION SET NLS_SORT=binary_ci;

 

會話已更改。

SQL> SELECT  * FROM  Tab ORDER BY  val;

       ID VAL

---------- ----------

        1 ABC123

        2 abc234

        3 Abc345

        4 aBC456

        5 aBc567

 

關於中文漢字的排序

SQL> TRUNCATE TABLE Tab;

表被截斷。

 

SQL> INSERT INTO tab   
SELECT 1, '' FROM DUAL UNION ALL   
SELECT 2, '' FROM DUAL UNION ALL
SELECT 3, '' FROM DUAL UNION ALL
SELECT 4, '' FROM DUAL UNION ALL
SELECT 5, '' FROM DUAL;

 
已創建5行。

SQL> commit;

提交完成。

 
-- 按照拼音來排序

SQL> SELECT * FROM Tab ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_PINYIN_M');

 
       ID VAL

---------- ----------

        23451-- 按照筆畫數來排序

SQL> SELECT * FROM Tab ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_STROKE_M');

 

       ID VAL

---------- ----------

        12354-- 按照偏旁部首來排序

 

SQL> INSERT INTO tab   
SELECT 6, '' FROM DUAL UNION ALL
SELECT 7, '' FROM DUAL UNION ALL
SELECT 8, '' FROM DUAL UNION ALL
SELECT 9, '' FROM DUAL;

已創建4行。

SQL> commit;

提交完成。


SQL> SELECT * FROM   Tab ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_RADICAL_M');


       ID VAL

---------- ----------

        123567489 士

 

已選擇9行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM