`
squall140
  • 浏览: 140772 次
  • 性别: 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行。

 

分享到:
评论

相关推荐

    oracle11g密码区分大小写问题

    oracle11g密码区分大小写问题,自11g开始,oracle缺省区分帐号的密码大小写(case sensitivity), 而11g以下版本则不区分, 在数据字典中以大写形式存在

    如何:让Oracle表及字段显示为区分大小写

    本文首先讲述了Oracle内部表存储原理,在此基础上如何使Oracle设计的表及其字段显示为区分大小写的形式,最后通过具体例子分析了使用默认全部大写和大小写混写的利弊,同时给出来不同情况在Power Desginer(PD)中的...

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

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

    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(区分大...

    详解MySQL查询时区分字符串中字母大小写的方法

    就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事。直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。 通过查询资料发现需要设置collate(校对) 。 collate规则: *_bin: 表示的是binary case...

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

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

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    1或者oracle, oracle数据库,不区分大小写,默认1,需java1.5及以上版本 2或者sqlserver, mssqlserver数据库,不区分大小写,需java1.6及以上版本 3或者mysql, mysql数据库,不区分大小写,需java1.5及以上版本 4或者...

    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比较和逻辑运算符...

    代码生成器 批量生成实体类、配置文件、存储过程等1.4

    看了下两年前上传的版本,感觉现在已经改了很多东西了,并且支持 Oracle (Oracle不区分大小写,但是可以改字段备注,然后生成实体类,就有大小写了) 代码生成器,可以生成 实体层,业务层,数据访问层, 存储过程, 数据...

    oracle维护常用语句.txt

    oracle日常维护常用语句,如:表空间创建/密码设置不过期/用户解锁/无法导出空表设置/用户不区分大小写设置等

    oracle 常用代码.

    原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。 select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 二、另要以24小时的形式显示出来要用HH24...

    oracle用什么SQL语句判断表存不存在

    exists(select tname from tab where tname =’TABLENAME’) 记得表名要大写,因为ORACLE是区分大小写的,所有的表名都存放在tab表中 您可能感兴趣的文章:Sql Server中判断表、列不存在则创建的方法Mysql判断表字段...

    Oracle数据库中的基本建库操作详解

    域名,可以只使用 库名——SID区分大小写——……——数据路径选择,模版默认的是$ORACLE_BASE/oradata/dababase——备份数据的路径——内存分配(SGA专用内存,事务处理为主;PGA系统内存,数据为主)|Sizing中的块...

    sql语句的一些优化

    在 sql 中,首先要注意书写规范。虽然数据库不区分大小写,但是 sql 语句在执行时, ORACLE 会将它全部转化为大写,如果在写 SQL 语句时时就全部写成大写,能节省些资源。

    Oracle的sql金典

    程序员oracle金典 匹配一个...--要区分大小写 SELECT REGEXP_SUBSTR('2016-1-1','\d*$') FROM DUAL; SELECT SUBSTR('2016-2-01',INSTR('2016-2-01','-',-1)+1) FROM DUAL; SELECT SUBSTR('2016-05-16',INSTR('2016-05-

    常用的Oracle doc命令(收藏)

    Conn sys/sys as sysdba–oracle数据库不区分大小写 2.sql文件 保存sql文件 save c:\test.txt 编辑sql语句,用记事本编辑 ed c:\1.txt –编辑 SQL 语句 ed –直接打开上一次缓存sql语句 描述数据表的结构 desc ...

    oracle 11g overview

    了解表空间加密、区分大小写的口令、数据屏蔽以及其他特性。 自动存储管理 了解新的 SYSASM 角色、可变的区大小以及其他 ASM 改进。 可管理性 探究自动内存管理、多列统计信息、联机修补等更多特性。 缓存和...

    在oracle上实现的单表的分页框架,使用该框架只需要新建一个显示的jsp,更改数据库连接,创建对应的javaBean就可以使用,详情请下载后查看分页框架说明

    本人在使用分页的时候嫌其麻烦,就自己改写了后为一个框架,暂时只支持对单表分页,该分页通过对表的相关反射,使用该分页只需要保证javaBean中的属性和表中的属性对应一致(不区分大小写)然后在页面上传上相关参数就...

Global site tag (gtag.js) - Google Analytics