查询数据的时候。
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行。