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行。
查询数据的时候。
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关于时间/日期的操作
2012-04-09 23:12 8551.日期时间间隔操作 当前时间减去7分钟的时间 s ... -
oracle 数据库增量备份
2012-03-16 20:03 1164EXP和IMP是Oracle提供的一种逻辑备份工具。逻辑备份创 ... -
oracle start with connect by 用法
2012-02-19 23:58 1029oracle 提供了start with connect by ... -
Oracle数据导入导出imp/exp
2012-02-09 17:38 625Oracle数据导入导出imp/exp 功能:Oracle数 ... -
性能监控SQL语句
2011-12-23 13:51 831分析表 analyze table tablename co ... -
常用SQL语句
2011-12-23 13:50 984查找数据库中所有字段 以对应的表 select C.colu ... -
安装到最后的两个脚本作用
2011-12-06 18:32 1049在linux下安装Oralce的时候,最后会让你以root的身 ... -
ORACLE中一个字符占多少字节
2011-12-01 22:07 3874在oracle中一个字符特别是中文占几个字节是不同的。 比如 ... -
提高SQL效率
2011-12-01 00:13 1030下面就某些SQL 语句的 where 子句编写中需要注意 ... -
“exists”和“in”的效率问题
2011-11-30 23:49 1021有两个简单例子,以说明 “exists”和“in”的效率问题 ... -
Oracle建立全文索引详解
2011-11-30 20:42 14761.全文检索和普通检索的区别 不使用Oracle text功 ... -
全文检索CLOB
2011-11-30 12:00 997建议使用全文检索(FULL TEXT SEARCH) ... -
“Oracle”数据库的“周数计算”
2011-11-16 13:25 994——日期计算,算第n周的第一天及最后一天是几号。 by key ... -
Oracle中TO_DATE格式
2011-11-16 13:17 837TO_DATE格式(以时间:2007-11-02 13:4 ... -
Oracle 索引 详解
2011-11-15 13:00 26048Oracle 索引 详解 ... -
Oracle SQL中的IN 和 EXSITS区别总结
2011-11-15 11:06 1014IN 确定给定的值是否与子查询或列表中的值相匹配。 EX ... -
Oracle 字符集的查看和修改
2011-11-14 23:09 952一、什么是Oracle字符集 ... -
Oracle Flashback技术总结
2011-11-14 01:06 965Flashback 技术是以Undo segment中的内容为 ... -
oracle日志归档模式改变
2011-11-14 00:15 1113在Oracle数据库中,主要 ... -
如何最大程度的 把表空间里面的数据给抢救出来
2011-11-03 16:18 1268今天一朋友问到一个比较有意识的问题: 如果一个表空间,其中一个 ...
相关推荐
Oracle数据库在处理对象名(如表、视图、存储过程等)时,默认情况下是区分大小写的。这意味着如果你创建了一个名为"USER"的表,然后尝试引用"User"或"USER"(大小写不同),Oracle可能无法识别到这个表,从而导致...
- `sort_rule`:指定排序规则的参数,如`'NLS_SORT=SCHINESE_PINYIN_M'`表示按照简体中文的拼音顺序进行排序,并且区分大小写(M表示区分大小写)。 **示例代码**: ```sql SELECT DEPTID, DEPTNAME FROM TDEPT ...
- **注意事项**:在Oracle中,字符串比较是区分大小写的。 - **模糊匹配**: - **示例**:查询所有姓名中包含字母`M`的员工。 ```sql SELECT * FROM emp WHERE ename LIKE '%M%'; ``` ##### 4. 范围查询 - **...
Oracle 10g的全球化特性还包括不区分大小写的查询和排序功能。这使得用户在搜索和排序数据时无需考虑字符的大小写,提升了用户体验并简化了代码。通过设置NLS_SORT会话参数,可以实现区分或不区分大小写、重音的排序...
默认情况下,Oracle对字符串不区分大小写,但可以通过设置数据库参数使其区分大小写。SQL Server则默认对字符区分大小写。 8. **序列**: - Oracle使用序列对象(如 `CREATE SEQUENCE seq_name`) 来生成自动递增...
Oracle 10g的全球化特性还包括不区分大小写的查询和排序,这对于用户来说非常方便,无需修改代码即可实现大小写不敏感的搜索和排序。通过设置NLS_SORT会话参数,可以指定不分大小写或不分重音的排序。例如,`ALTER ...
查询语句的书写规则包括:不区分大小写、可以单行书写或多行书写、关键字不要缩写、关键字最好大写、其他语法元素小写、缩进和换行的使用提高可读性。 三、限制数据和排序 限制数据和排序是SQL中两个重要的概念。...
在Oracle SQL PLUS环境中,SQL语句是不区分大小写的,每条语句可以使用数字分行,这些分行的语句在SQL PLUS中被称为缓冲区。语句通常以分号`;`或斜线`/`结束,也可通过RUN命令来执行。例如,你可以使用`SELECT`语句...
- **大小写敏感性**:MySQL区分大小写,而Oracle不区分。 - **外连接语法**:Oracle使用“+”表示外连接,MySQL则使用`LEFT JOIN`或`RIGHT JOIN`。 - **更新返回值**:Oracle返回零表示未更新任何行,而MySQL返回1...
- **不区分大小写的查询和排序**:简化了数据检索过程,无需担心大小写或重音的影响,提高了数据的可访问性和用户体验。 #### 正则表达式支持 - **SQL和PL/SQL中的本地支持**:正则表达式被直接集成到SQL和PL/SQL...
- **大小写不敏感**:SQL语句在Oracle中不区分大小写。 - **格式化**:为了提高可读性,建议将SQL语句分多行书写,并使用适当的缩进。 - **关键字不可缩写**:SQL的关键字不能被缩写,并且必须保持在同一行内。 - **...
14. **大小写敏感性**:Oracle对字符串比较是区分大小写的。 15. **IN和NOT IN运算符**:`IN`和`NOT IN`用于筛选满足或不满足指定列表条件的记录,如`WHERE empno NOT IN (7369, 7499);`。 16. **LIKE通配符**:`...
15. 大小写敏感:Oracle在查询时区分大小写。 16. 排除特定值:`NOT IN`用于排除指定值,如`SELECT * FROM emp WHERE empno NOT IN(7369,7499);`。 17. `LIKE`通配符:`%`代表任意数量字符,`_`代表单个字符,如`...
字符型数值是区分大小写的,而日期型数值是区分日期表达形式的。默认的日期形式是 DD-MON-YY。 例如: SELECT ename, job, deptno FROM emp WHERE ename = 'JAMES'; 在上面的示例中,我们使用单引号来括住字符型...
需要注意的是,SQL语句在书写时并不区分大小写,但为了可读性通常推荐使用标准的大小写格式。SQL语句可以分布在多行上,但关键词不能缩写或跨行写。为了提高代码的清晰度,通常会将不同子句放在单独的行,并使用缩进...
在本例中,它们被设置为`utf8`和`utf8_general_ci`,这意味着数据库使用UTF-8编码,并使用通用的不区分大小写的排序规则。如果数据库实际使用的字符集不同,应相应调整。 2. **权限**:确保CI服务器上的用户具有...
- **字符串大小写敏感** 在比较时注意区分。 - **BETWEEN AND** 用于选取介于两个值之间的数据。 - **IN运算符** 可用于指定多个可能的值。 - **LIKE运算符** 用于模糊匹配,支持通配符 `%` 和 `_`。 - **比较...