查詢數據的時候。
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行。