`

Oracle 大小写区分的处理 中文排序

 
阅读更多
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行。

分享到:
评论

相关推荐

    解决ORALCE大小写限制及登录限制

    Oracle数据库在处理对象名(如表、视图、存储过程等)时,默认情况下是区分大小写的。这意味着如果你创建了一个名为"USER"的表,然后尝试引用"User"或"USER"(大小写不同),Oracle可能无法识别到这个表,从而导致...

    oracle数据库汉字首字排序

    - `sort_rule`:指定排序规则的参数,如`'NLS_SORT=SCHINESE_PINYIN_M'`表示按照简体中文的拼音顺序进行排序,并且区分大小写(M表示区分大小写)。 **示例代码**: ```sql SELECT DEPTID, DEPTNAME FROM TDEPT ...

    oracle限定查询和排序

    - **注意事项**:在Oracle中,字符串比较是区分大小写的。 - **模糊匹配**: - **示例**:查询所有姓名中包含字母`M`的员工。 ```sql SELECT * FROM emp WHERE ename LIKE '%M%'; ``` ##### 4. 范围查询 - **...

    Oracle数据库10g-支持全球化特性的平台-Powe.pptx

    Oracle 10g的全球化特性还包括不区分大小写的查询和排序功能。这使得用户在搜索和排序数据时无需考虑字符的大小写,提升了用户体验并简化了代码。通过设置NLS_SORT会话参数,可以实现区分或不区分大小写、重音的排序...

    oracle与SQL server的语法差异总结

    默认情况下,Oracle对字符串不区分大小写,但可以通过设置数据库参数使其区分大小写。SQL Server则默认对字符区分大小写。 8. **序列**: - Oracle使用序列对象(如 `CREATE SEQUENCE seq_name`) 来生成自动递增...

    Oracle数据库10g支持全球化特性的平台Powe.pptx

    Oracle 10g的全球化特性还包括不区分大小写的查询和排序,这对于用户来说非常方便,无需修改代码即可实现大小写不敏感的搜索和排序。通过设置NLS_SORT会话参数,可以指定不分大小写或不分重音的排序。例如,`ALTER ...

    Oracle基础

    查询语句的书写规则包括:不区分大小写、可以单行书写或多行书写、关键字不要缩写、关键字最好大写、其他语法元素小写、缩进和换行的使用提高可读性。 三、限制数据和排序 限制数据和排序是SQL中两个重要的概念。...

    PLSql循序渐进全面学习教程--Oracle

    在Oracle SQL PLUS环境中,SQL语句是不区分大小写的,每条语句可以使用数字分行,这些分行的语句在SQL PLUS中被称为缓冲区。语句通常以分号`;`或斜线`/`结束,也可通过RUN命令来执行。例如,你可以使用`SELECT`语句...

    从 Oracle 合并到 MySQL - NPR 实例分析

    - **大小写敏感性**:MySQL区分大小写,而Oracle不区分。 - **外连接语法**:Oracle使用“+”表示外连接,MySQL则使用`LEFT JOIN`或`RIGHT JOIN`。 - **更新返回值**:Oracle返回零表示未更新任何行,而MySQL返回1...

    Oracle_数据库_10g:数据泵

    - **不区分大小写的查询和排序**:简化了数据检索过程,无需担心大小写或重音的影响,提高了数据的可访问性和用户体验。 #### 正则表达式支持 - **SQL和PL/SQL中的本地支持**:正则表达式被直接集成到SQL和PL/SQL...

    ORACLE__SQL语句教学

    - **大小写不敏感**:SQL语句在Oracle中不区分大小写。 - **格式化**:为了提高可读性,建议将SQL语句分多行书写,并使用适当的缩进。 - **关键字不可缩写**:SQL的关键字不能被缩写,并且必须保持在同一行内。 - **...

    Oracle经典的SQL语句训练(100例).doc

    14. **大小写敏感性**:Oracle对字符串比较是区分大小写的。 15. **IN和NOT IN运算符**:`IN`和`NOT IN`用于筛选满足或不满足指定列表条件的记录,如`WHERE empno NOT IN (7369, 7499);`。 16. **LIKE通配符**:`...

    Oracle系列.docx

    15. 大小写敏感:Oracle在查询时区分大小写。 16. 排除特定值:`NOT IN`用于排除指定值,如`SELECT * FROM emp WHERE empno NOT IN(7369,7499);`。 17. `LIKE`通配符:`%`代表任意数量字符,`_`代表单个字符,如`...

    Oracle SQL&PLSQL课件:第2章 限定查询和排序.ppt

    字符型数值是区分大小写的,而日期型数值是区分日期表达形式的。默认的日期形式是 DD-MON-YY。 例如: SELECT ename, job, deptno FROM emp WHERE ename = 'JAMES'; 在上面的示例中,我们使用单引号来括住字符型...

    ORACLE SQL 官方教程 PPT

    需要注意的是,SQL语句在书写时并不区分大小写,但为了可读性通常推荐使用标准的大小写格式。SQL语句可以分布在多行上,但关键词不能缩写或跨行写。为了提高代码的清晰度,通常会将不同子句放在单独的行,并使用缩进...

    CI访问oracle 10g的问题

    在本例中,它们被设置为`utf8`和`utf8_general_ci`,这意味着数据库使用UTF-8编码,并使用通用的不区分大小写的排序规则。如果数据库实际使用的字符集不同,应相应调整。 2. **权限**:确保CI服务器上的用户具有...

    Oracle数据库、SQL

    - **字符串大小写敏感** 在比较时注意区分。 - **BETWEEN AND** 用于选取介于两个值之间的数据。 - **IN运算符** 可用于指定多个可能的值。 - **LIKE运算符** 用于模糊匹配,支持通配符 `%` 和 `_`。 - **比较...

Global site tag (gtag.js) - Google Analytics