Oracle 大小寫區分的處理

查詢數據的時候。

SQL Server 默認 不區分大小寫。 如果要區分,就要額外的設置。點擊打開鏈接

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

 

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

 

首先是測試表/數據

SQL> CREATE TABLE tab (

 2    id  INT,

 3    val VARCHAR2(10)

 4  );

 

表已創建。

 

SQL> INSERT INTO tab

 2    SELECT 1, 'ABC123' FROM DUAL UNION ALL

 3    SELECT 2, 'abc234' FROM DUALUNION ALL

 4    SELECT 3, 'Abc345' FROM DUAL UNION ALL

 5    SELECT 4, 'aBC456' FROM DUALUNION ALL

 6    SELECT 5, 'aBc567' FROM DUAL;

 

已創建5行。

 

 =操作的例子

SQL> SELECT

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   val = 'abc123';

 

未選定行

 

SQL> SELECT

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   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

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   val = 'abc123';

 

       ID VAL

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

        1 ABC123

 

LIKE操作的例子

SQL> SELECT

 2    *

 3  FROM

 4    tab

 5  WHERE

  6   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

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   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

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   REGEXP_LIKE (val, '^a');

 

       ID VAL

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

        2 abc234

        4 aBC456

        5 aBc567

 

ALTER SESSION SET … 之後

 

SQL> SELECT

 2    *

 3  FROM

 4    tab

 5  WHERE

 6   REGEXP_LIKE (val, '^a');

 

       ID VAL

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

        1 ABC123

        2 abc234

        3 Abc345

        4 aBC456

        5 aBc567



排序的例子


SQL> SELECT

 2    *

 3  FROM

 4    Tab

 5  ORDER BY

 6    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

 2    *

 3  FROM

 4    Tab

 5  ORDER BY

 6    val;

 

       ID VAL

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

        1 ABC123

        2 abc234

        3 Abc345

        4 aBC456

        5 aBc567

 

關於中文漢字的排序


SQL> TRUNCATE TABLE Tab;

 

表被截斷。

 

SQL> 

SQL> INSERT INTO tab

 2    SELECT 1, '一' FROM DUAL UNION ALL

 3    SELECT 2, '二' FROM DUAL UNION ALL

 4    SELECT 3, '三' FROM DUAL UNION ALL

 5    SELECT 4, '四' FROM DUAL UNION ALL

 6    SELECT 5, '五' FROM DUAL;

 

已創建5行。

 

SQL> commit;

 

提交完成。

 

 

-- 按照拼音來排序

SQL> SELECT 

 2    * 

 3  FROM 

 4    Tab 

 5  ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_PINYIN_M');

 

       ID VAL

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

        2 二

        3 三

        4 四

        5 五

        1 一

 

-- 按照筆畫數來排序

SQL> SELECT 

 2    * 

 3  FROM 

 4    Tab 

 5  ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_STROKE_M');

 

       ID VAL

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

        1 一

        2 二

        3 三

        5 五

        4 四

 

-- 按照偏旁部首來排序

 

SQL> INSERT INTO tab

 2    SELECT 6, '人' FROM DUAL UNION ALL

 3    SELECT 7, '十' FROM DUAL UNION ALL

 4    SELECT 8, '土' FROM DUAL UNION ALL

 5    SELECT 9, '士' FROM DUAL;

 

已創建4行。

 

SQL> commit;

 

提交完成。

 

SQL> SELECT 

 2    * 

 3  FROM 

 4    Tab 

 5  ORDER BY NLSSORT(val, 'NLS_SORT=SCHINESE_RADICAL_M');

 

       ID VAL

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

        1 一

        2 二

        3 三

        5 五

        6 人

        7 十

        4 四

        8 土

        9 士

 

已選擇9行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章