`

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行。

分享到:
评论

相关推荐

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

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

    Oracle数据库试题.docx

    Oracle标识符在未被双引号包围时是不区分大小写的,但如果被双引号包围,就会区分大小写,选项C正确,D错误。 5. 要创建一个检查约束,确保用户表(user)中的年龄(age)大于16岁,应使用ALTER TABLE语句加上CHECK约束...

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

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

    Oracle基础

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

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

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

    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

    4.3字符串是大小写敏感的,在比较时严格区分大小写 8 4.4 where子句后面可以跟多个条件表达式 8 4.5 between and运算符 8 4.6 in运算符(多值运算符) 8 4.7 like运算符 9 4.8 is null运算符 9 4.9比较和逻辑运算符...

    ORACLE__SQL语句教学

    SQL语言在编写时并不区分大小写,但为了提高代码可读性,通常建议将关键词大写,列名小写。SQL语句可以写在一行或多行,但为了清晰,通常每个子句单独一行。此外,SQL*Plus中,列头会根据数据类型自动对齐,数字和...

    Oracle基本查询过滤排序示例解析

    Oracle数据库是一个强大的关系型数据库管理系统,它提供了丰富的...记住,SQL语句不区分大小写,但为了提高可读性,通常将关键字大写,列名和表名小写。编写SQL时,建议遵循一定的缩进规则,以便更好地理解语句结构。

    Oracle循序渐进全面学习教程.doc

    不区分大小写,但为了代码可读性,通常建议遵循大写关键字,小写列名的约定。语句可以在SQL PLUS环境中以分号或斜杠结尾,或者使用RUN命令执行。 2. **数学运算**:在SELECT语句中,可以对数值或日期字段进行加、减...

    第14章Oracle中的函数与表达式.pptx

    - **lower()函数**:此函数将字符串转换为全小写,这对于不区分大小写的查询非常有用,比如在验证用户名时不区分大小写。 - **upper()函数**:它将字符串转换为全大写,用于确保数据库和查询条件的一致性。 - **...

    oracle相关SQL

    - **关键字和大小写**:SQL关键字不区分大小写,但表名和列名在Oracle中默认是区分大小写的(除非数据库模式设置为不区分大小写)。 - **结束符**:SQL语句以分号`;`结尾。 - **别名**:使用AS或双引号为列名指定...

    oracle ocp007 笔记

    - 不区分大小写的规则只适用于Oracle SQL的关键词和别名,但实际的列名和值的大小写敏感。 - `AS`关键字用于创建列的别名,如`SELECT au_id AS "author_id" FROM kong.authors`。 - 运算符`+`, `-`, `*`, `/`用于...

    Oracle课后练习.pdf

    2. 在SQL查询中,列名可以被引号包围以保持大小写,但默认情况下,Oracle是不区分大小写的。因此,列头的显示会根据数据库的设置而定,通常会忽略大小写。选项A和B是可能的,取决于数据库配置,但根据标准SQL,选项B...

    oracle开发学习笔记

    当`NLS_COMP=LINGUISTIC`,`NLS_SORT=BINARY_CI`时,比较将是不区分大小写的。 10. **字符串修剪**:`RTRIM(LTRIM(x,'xxx'),'xxx')`用于去除字符串两端的指定字符。 11. **解释方式和原生方式编译PL/SQL**:`ALTER...

    Oracle官方ppt2

    在进行比较时,字符串是区分大小写的,而日期格式的敏感性则取决于所使用的NLS_DATE_FORMAT参数。 比较运算符在查询中扮演着重要角色,包括`=`, `>`, `, `>=`, `, `<>`等。例如,若要查找薪资小于或等于3000的员工...

    Oracle课程大纲128.pdf

    - **SQL**(Structured Query Language)是用于管理和操作数据库的标准语言,其语句不区分大小写,符号均为英文。 2. **常见数据库系统**: - **Oracle**:商业化的RDBMS,支持多模式,提供不同版本如10G、11G、...

Global site tag (gtag.js) - Google Analytics