sql的隐式转换_js强制转换和隐式转换

sql的隐式转换_js强制转换和隐式转换什么叫做隐式转换? 显示转换,就是你使用转换函数进行操作。隐式转换,就是你不使用转换函数,默认就给转换了。比如定义一个int型的变量@a,然后给变量符值set@a=’2’,这个就会隐式转换,把字符转换成数字了。Oracle隐式转换1     Oracle 隐式转换           Oracle中对不同类型的处理具有显式类型转换(Explicit)和隐式类型转换(Implicit…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

什么叫做隐式转换?

 显示转换,就是你使用转换函数进行操作。

 隐式转换,就是你不使用转换函数,默认就给转换了。比如定义一个int型的变量@a,然后给变量符值 set @a = '2' ,这个就会隐式转换,把字符转换成数字了。

Oracle 隐式转换

1     Oracle 隐式转换           

Oracle中对不同类型的处理具有显式类型转换(Explicit)和隐式类型转换(Implicit)两种方式,对于显式类型转换,我们是可控的,但是对于隐式类型转换,当然不建议使用,
因为很难控制,有不少缺点,但是我们很难避免碰到隐式类型转换,如果不了解隐式类型转换的规则,那么往往会改变我们SQL的执行计划,从而可能导致效率降低或其它问题。

1.1  隐式转换发生场景

1.对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字段的数据类型。

insert into text values (‘1′,’Jack’,’18’相当于 insert into text values(,’1’,’Jack’,to_number(’18’))

update text set age=’19’相当于update text set age=to_number(’19’)

2.当比较字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。例如:

 select * from text where age=’19’;

   1- filter(“AGE”=19)

注:select * from text where age=’19’相当于select * from text where age=to_number(’19’)

   1- filter(TO_NUMBER(“ID”)=1)

注:select * from text where id=1;相当于select * from text where to_number(id)=1

如果id列建有索引此时将失效

3.当比较字符型和日期型的数据时,oracle会把字符型转换为日期型。例如:

 1- filter(“DATE_DATE”>TO_DATE(‘ 2014-02-26 00:00:00’, ‘syyyy-mm-dd hh24:mi:ss’))

注:select * from table_date where date_date>‘2014-2-26 0:0:0’相当于

      select * from table_date where date_date>to_date(‘2014-2-26 0:0:0’, ’yyyy-mm-ddhh24:mi:ss’

4. 隐式转换发正在字段列上时将使索引失效。例如:

1)当末发生隐式转换时索引有效

2)当字段列发生隐式转换时索引将失效

SQL> explain plan for  select * from t1 wherevid=15612;

   1- filter(TO_NUMBER(“VID”)=15612)

注:select * from t1 where vid=15612 相当于select* from t1 where to_number(vid)=15612,vid列发生隐式转换执行计划显示全表扫描末使用索引。

1.2  隐式转换的缺点

1. 使用显示类型转换会让我们的SQL更加容易被理解,也就是可读性更强,但是隐式类型转换却没有这个优点

2. 隐式类型转换往往对性能产生不好的影响,特别是左值的类型被隐式转为了右值的类型。这种方式很可能使我们本来可以使用索引的而没有用上索引,也有可能会导致结果出错。

3. 隐式类型转换可能依赖于发生转换时的上下文环境,比如1中的to_date(sysdate,fmt),一旦上下文环境改变,很可能我们的程序就不能运行。

4. 隐式类型转换的算法或规则,以后Oracle可能改变,这是很危险的,意味着旧的代码很可能在新的Oracle版本中运行出现问题(性能、错误等),显示类型转换总是有最高的优先级,所以显示类型转换没有这种版本更替可能带来的问题。

5. 隐式类型转换是要消耗时间的,当然同等的显式类型转换时间也差不多,最好的方法就是避免类似的转换,在显示类型转换上我们会看到,最好不要将左值进行类型转换,到
  
时候有索引也用不上索引,还要建函数索引,索引储存和管理开销增大。

小结

Oracle使用数据类型的优先级来决定隐式类型转换,原则是将优先级低的转换为优先级高的(数据类型优先级为:Number>字符类型>日期类型)。隐式转换发生在字段列上时将使索引失效

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183047.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • qt集成ziplib压缩文件和目录「建议收藏」

    qt集成ziplib压缩文件和目录「建议收藏」今天本来想完成压缩文件的任务,结果并没有想象中那么轻松,1.qt自带有压缩工具,但是不考虑,因为qCompress主要用来压缩字节流,就算自己封装成压缩文件,也只能用qt的接口进行解压,可项目需要的是一个通用的压缩工具,2.zlib+quazipzlib官网:http://www.zlib.net/quazip参考http://quazip.sourceforge.net/cla…

    2022年7月26日
    25
  • qtcpserver用法_qt tcpserver

    qtcpserver用法_qt tcpserver【Qt服务器与多线程使用】        ~~~~~~~~        QTcpServer致命缺点就是单线程!!要想实现多线程则需要继承该类之后重写incomingConnection函数,在该函数中将socketDescripto…

    2025年9月6日
    6
  • 网络攻防蓝军_网络攻防怎么学

    网络攻防蓝军_网络攻防怎么学永恒之蓝1.引言2.永恒之蓝定义3.SMB协议3.windows7版本说明4.攻击实例4.1攻击者和被攻击者展示4.2详细攻击过程4.3接下来尝试攻击一下windows105.参考文献1.引言让一个不爱学习的人整天蒙英语题,听张宇的视频实在是枯燥了点,于是决定看看网安,积累积累一些有趣的玩意儿。然后,自己不是专业的,也不是为了工作,可能会查阅大佬的博文,然后把概念借鉴过来,会留下参考链接的,如果博主不同意引用直接评论我会删除的。好,引用张宇一句话:直接来吧。

    2022年8月31日
    2
  • 机器学习之集成学习

    1.什么是集成学习?如果你随机向几千个人询问一个复杂问题,然后汇总它们的答案。在许多情况下你会发现,这个汇总的回答比专家的答案还要好,这被称为集体智慧,同样,如果你聚合一组预测器的预测,得到的预测

    2021年12月30日
    43
  • 什么是ARP欺骗_ARP欺骗防范

    什么是ARP欺骗_ARP欺骗防范ARP欺骗的本质是把虚假的IP-MAC映射关系通过ARP报文发给主机,让主机把虚假的IP-MAC映射存入ARP缓存表(可能是IP地址错误,也可能是MAC地址错误),让其无法正确发送数据漏洞的根源ARP协议是无连接操作系统收到ARP请求或响应后无法确认senderMAC和senderIP真假ARP欺骗伪造网关攻击者B伪造ARP报文(senderIP地址是网关的,senderMAC地址不是网关的),发送给网段内的主机A,那么主机A就会把网关的ip地址和伪造的mac地址缓存到arp缓.

    2025年7月3日
    2
  • 配置管理小报100127:端口

    配置管理小报100127:端口

    2021年8月25日
    70

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号