`
squall140
  • 浏览: 146191 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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表及字段显示为区分大小写

    ### 如何让Oracle表及字段显示为区分大小写 #### Oracle内部表存储原理与区分大小写的实现 在深入了解如何让Oracle表及字段显示为区分大小写之前,我们需要先理解Oracle内部是如何存储表和字段的。Oracle数据库...

    oracle11g密码区分大小写问题

    ### Oracle 11g 密码区分大小写问题详解 #### 一、Oracle 11g 版本特性概述 自 Oracle 11g 版本开始,Oracle 数据库默认开启了密码大小写敏感(case sensitivity)功能。在早期版本如 10g 及其之前的版本中,默认...

    datax-v202309 oracle reader&writer 区分大小写优化版免费下载

    oracle 默认不区分大小写,优化了datax源码使其区分大小写。 详情参考博客: https://blog.csdn.net/qq_38688267/article/details/140986163 https://blog.csdn.net/qq_38688267/article/details/140986163 ...

    Oracle中对像名大小写敏感性的深入解析

    然而,Oracle实际上有一套复杂的规则来处理对象名的大小写敏感性,这在某些特定情况下可能会引起混淆。下面我们将深入探讨Oracle对象名大小写敏感性的处理机制。 在Oracle中,对象名(如表名、视图名、字段名、函数...

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

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

    DevExpress DXperience 使用 Linq 及CriteriaOperator 查找 Oracle 字符字段不区分大小写代码

    DevExpress DXperience 使用 Linq 及CriteriaOperator 查找 Oracle 字符字段不区分大小写代码

    oracle 11g 设置用户密码大小写敏感测试

    本文将详细探讨Oracle 11g版本中关于用户密码大小写敏感性的设置方法,并通过实例测试说明如何进行此项配置的验证。 在Oracle 11g中,密码的大小写敏感性是由参数`sec_case_sensitive_logon`控制的。这个参数属于...

    oracle日期格式和java日期格式区别 HH24:mm:ss和HH24:mi:ss的区别

    java(区分大小写):yyyy-MM-dd HH:mm:ss 12小时制: java(区分大小写):yyyy-MM-dd hh:mm:ss 2)毫秒: java: SSS 24小时制: java(区分大小写):yyyy-MM-dd HH:mm:ss.SSS 12小时制: java(区分大...

    Oracle 11g 安装使用手册

    常见故障及分析是 Oracle 11g 的一个重要部分,包括 Sql 语句与 Sqlserver 的区别、取前几行数据的区别、关联表的区别、对日期类型的处理、取服务器时间、连接字符串、大小写区分、取子字符串函数等。 1. Sql 语句...

    Oracle学习笔记 PDF

    - SQL语句本身不区分大小写,但在查询特定字段值时需要区分大小写。 ##### 3.2 记事本命令调用 - **编写SQL程序**: - 在编写多行SQL命令时,直到输入分号才会执行命令。 - 可以使用外部编辑器(如记事本)编写...

    SQLServer与Oracle语法差异汇总.docx

    Oracle默认不区分大小写,但可以通过设置使数据库区分大小写。相比之下,SQL Server通常不区分大小写,但在某些特定情况下(如表名和列名)可能会区分大小写。 至于`SELECT`语句,Oracle允许将结果集作为临时表使用...

    关于创建oracle 连接时报以下错误,ORA-01017 ORA-02063

    在Oracle 11g中默认开启的密码大小写敏感性需要特别注意,因为当从一个不区分密码大小写的旧版本数据库连接到一个区分大小写的版本时,必须确保提供正确的认证凭证。通过调整初始化参数或在创建数据库链接时明确指定...

    Oracle快速参考手册

    4. 名称不区分大小写,除非被双引号包围,双引号内的名称保持大小写敏感。 5. 双引号内的名称不能包含内置引号。 接着,我们深入学习Oracle的一些核心概念: 1. **数据库(database)**:物理存储在操作系统上的...

    oracle函数大全

    在实际编程中,我们需要注意区分Oracle函数的大小写敏感性,因为在PL/SQL中函数是不区分大小写的,但在SQL语句中则可能需要按照实际的大小写来编写函数名。此外,熟悉并正确使用这些函数将有助于我们编写出更高效、...

    Oracle使用说明

    - SYSTEM账户:这是另一个具有较高权限的账户,用于数据库管理和维护,密码同样为“oracle”(不区分大小写)。 - SCOTT账户:这是一个示例用户账户,通常用于教学目的,密码为“tiger”(不区分大小写)。 请注意...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(string, pattern, ...modifier :模式(‘i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’) SELECT REGEXP_SUBSTR('123,,,ABC,!@#,,,', '[^,]

    SQL2000将数据导入Oracle9i的方法

    特别需要注意的是,Oracle数据库在默认情况下区分大小写,而SQL Server 2000通常是不区分大小写的。因此,如果你的SQL Server表名是小写的,导入Oracle时必须转换为大写。这可以通过在Wizard中更改表名或在导出前在...

Global site tag (gtag.js) - Google Analytics