Oracle字符类型与数值类型的转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle字符类型与数值类型的转换相关的知识,希望对你有一定的参考价值。
“避免改变索引列的类型.:
当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换.
假设 EMPNO是一个数值类型的索引列.
Sql代码
SELECT … FROM EMP WHERE EMPNO = ‘123'
实际上,经过ORACLE类型转换, 语句转化为:
Sql代码
SELECT … FROM EMP WHERE EMPNO = TO_NUMBER(‘123')
幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.
现在,假设EMP_TYPE是一个字符类型的索引列.
SELECT … FROM EMP WHERE EMP_TYPE = 123
这个语句被ORACLE转换为:
SELECT … FROM EMP WHERETO_NUMBER(EMP_TYPE)=123
因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型”
但我这里怎么看都是" 注意当字符和数值比较时, ORACLE会优先转换字符类型到数值类型"?哪个正确呢?谢谢!
我做过一个项目,用两张有3千万的表进行join,结果发现速度慢得受不了,该加的索引都加了,用执行计划看了,发现索引用不到,问题也就出在隐式转换身上。所以,第一句是对的,而第二句其实我也不是很确定哪个优先,从表面上看是看不出来的,要了解到Oracle内部的转换机制。。。小小意见,一起探讨探讨。。。 参考技术A 应该是优先转换定值,滞后转化甚至不转换变量
比如 SELECT × FROM EMP WHERE EMP_TYPE = TO_CHAR(123)
只需要在编译时候转换一次;
SELECT * FROM EMP WHERE TO_NUMBER(EMP_TYPE) = 123
会在每条记录都to_number一次
完全不是一个概念! 参考技术B 当比较一个字符型和数值型的值时,oracle会把字符型的值隐式转换为数值型。
所以,你的理解是对的。
上面的例子也正是这样的意思。
oracle中的number类型对应mysql里面啥类型啊
Number在Oracle中是数值型的统称,可以表示Oracle中的所有数值。而MySQL没有数值的统称,只有分别的数据类型,例如 INT、FLOAT、DOUBLE等。
MySQL的数值类型有如下几种 :
扩展资料
ORACLE的数据类型
CHAR 固定长度字符串,最大长度2000 bytes;
VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749;
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes;
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes;
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS);
LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB;
RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等;
LONG RAW 可变长度的二进制数据 最大长度2G 可存放多媒体图象声音等;
BLOB 二进制数据 最大长度4G;
CLOB 字符数据 最大长度4G;
CLOB 根据字符集而定的字符数据 最大长度4G ;
BFILE 存放在数据库外的二进制数据 最大长度4G ;
ROWID 数据表中记录的唯一行号 10 bytes ********.****.****格式,*为0或1;
NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes;
NUMBER(P,S) 数字类型 P为总位数,S为小数位数;
DECIMAL(P,S) 数字类型 P为总位数,S为小数位数;
INTEGER 整数类型 小的整数;
FLOAT 浮点数类型 NUMBER(38),双精度;
REAL 实数类型 NUMBER(63),精度更高。
MySQL的数据类型
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT;
浮点数类型:FLOAT、DOUBLE、DECIMAL;
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB;
日期类型:Date、DateTime、TimeStamp、Time、Year;
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection。
参考资料来源:MySQL官方文档
参考资料来源:Oracle官方文档
参考技术A1、第一步,双击打开SQLyog客户端软件,新建数据库表t_date_time,直接在客户端进行创建。
2、在Python 3里,只有一种整数类型 ,不分整型和长整型。使用Python的内置函数type可以查看变量所指的数据类型。
3、整型计算。
4、 浮点类型,Python中的浮点类型类似Java语言中的double 类型,是双精度浮点型,可以直接用十进制或科学计数法表示。
5、布尔类型是表示逻辑状态的类型,用 True 和 False 来表示真假,任何非 0 数字都为 True。所以,在一定意义上可以把 布尔类型看成整型。
参考技术B oracle中的number类型是广泛的数字类型,由number(M,N)来确定精度,n=0为整数,M确定的是数据大小的范围,所以说不能与mysql中的进行唯一对应。 参考技术C Oracle的number 可以用sql标准的 numeric/decimal来 对应。
mysql应该支持numeric/decimal类型。 参考技术D decimal ,如果想表示的全面点,就可以用decimal类型,但是mysql中的数据类型比较宽松,你定义成varchar类型也可以和数字进行匹配,但是最好自己定义的严谨点儿。
以上是关于Oracle字符类型与数值类型的转换的主要内容,如果未能解决你的问题,请参考以下文章