测试使用环境:oracle 11g r1

平常写sql语句时,大大咧咧,不太注意和数字有关的数据类型,有时例如 where c1=111 和 where c1='111'这样混用,却不曾想这里面另有蹊跷!

数据准备:

创建一个测试表 t_test3 , 字段 c1 varchar2(20), 字段上创建了索引,向该表中添加了100条数据,内容为 1-100数字。

创建一个测试表 t_test4 , 字段 c1 number, 字段上创建了索引,向该表中添加了100条数据,内容为 1-100数字。

测试:

select * from t_test3 where c1='11'; -- 结果:观察执行计划,使用了索引

select * from t_test3 where c1=11; -- 结果:观察执行计划,不使用索引,全表扫描,执行的时候做的转换为 (TO_NUMBER("C1")=11)

结论:

查询时,字符类型字段为查询条件赋值为数值类型时,隐式转换为该字段转换为数值型,不使用索引;

测试:

select * from t_test4 where c1=11; -- 结果:观察执行计划,使用了索引

select * from t_test4 where c1='11'; -- 结果:观察执行计划,使用了索引,转换为 "C1"=11

结论:

查询时,数值类型字段为查询条件赋值为字符类型时,隐式转换为将字符转换为数值,继续使用索引;

测试:

向t_test3表中增加一条数据 insert into t_test3 (c1) values("lala"); commit;

select * from t_test3 where c1=11; -- 结果:报错 ORA-01722: 无效数字

结论:

当字符类型字段中 既有数字值,又有字符值,查询条件直接写成数值会报错,因为隐式转换会将整个字段转换为数值型,由于字符型无法转换,故报错。

Oracle数据类型隐式转换小析的更多相关文章

  1. JavaScript复习之--javascript数据类型隐式转换

    JavaScript数据类型隐式转换.一,函数类    isNaN()    该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true.    alert()    输出的内容隐式的 ...

  2. js数据类型隐式转换问题

    js数据类型隐式转换 ![] == false //true 空数组和基本类型转换,会先[].toString() 再继续比较 ![] == [] //true ![] //false [] == [ ...

  3. js中的数据类型隐式转换的三种情况

    js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...

  4. SQL Server有意思的数据类型隐式转换问题

    写这篇文章的时候,还真不知道如何取名,也不知道这个该如何将其归类.这个是同事遇到的一个案例,案例比较复杂,这里抽丝剥茧,仅仅构造一个简单的案例来展现一下这个问题.我们先构造测试数据,如下所示: CRE ...

  5. 大坑啊oracle的隐式转换

    (25)禁止使用属性隐式转换 解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不 ...

  6. JavaScript —— 常用数据类型隐式转换

    公用方法: let checkType = (data) => { if(data){ console.log(true); }else{ console.log(false); } } 一.字 ...

  7. 关于ORACLE隐式转换后性能问题

    SELECT TM.MONEY_CODE FROM T_CONTRACT_MASTER T,T_MONEY TM WHERE T.MONEY_ID = TM.MONEY_ID AND T.POLICY ...

  8. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  9. javascript笔记整理(数据类型强制/隐式转换 )

    A.数据类型强制转换 1.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 var a=false;alert(Number(a)); ...

随机推荐

  1. Shell练习

    1   在终端下运行程序,首先清屏,然后提示:“Input a file or directory name, please!”.从键盘输入一个字符串(如:xxx),如果该字符串是目录,则显示:“xx ...

  2. iOS GCD NSOperation NSThread等多线程各种举例详解(拷贝)

    2年多的iOS之路匆匆而过,期间也拜读来不少大神的博客,近来突然为自己一直做伸手党感到羞耻,是时候回馈社会.回想当年自己还是小白的时候,照着一些iOS多线程教程学,也只是照抄,只知其然.不知其所以然. ...

  3. AWS-CDH5.5安装-安装

    1.安装MySQL [root@ip---- mysql]# rpm -ivh MySQL-server--.el6.x86_64.rpm MySQL-client--.el6.x86_64.rpm ...

  4. 构造函数,const char*与c_str

    /******************************************************************************* * 版权所有: * 模 块 名: * ...

  5. JavaScript判断数据类型

    JavaScript中判断数据类型的方式有三种: 1.typeof typeof 1;   //"number" typeof "abc";  //" ...

  6. Dapper学习笔记(3)-增、删、改、查

    一.建表 在数据库中建立如下三张表: CREATE TABLE [dbo].[T_User] ( , ) PRIMARY KEY NOT NULL, ) NOT NULL, ) NULL, ) NUL ...

  7. Unreal Engine Plugin management

    Be aware to remove any dependencies to any modules related to Editor, or else it will end up with fa ...

  8. Jquery实现select左右栏的添加移除

    首先是效果展示, 兼容火狐,IE6+,谷歌没测试有

  9. lucene5学习 - 索引基本操作(创建,查询,更新,删除,分页)

    package lucene5; import java.io.IOException; import java.nio.file.Paths; import java.text.SimpleDate ...

  10. sql 聚合函数、排序方法详解

    聚合函数 count,max,min,avg,sum... select count (*) from T_Employee select Max(FSalary) from T_Employee 排 ...