mysql和oracle部分格式转换函数的区别
Oracle到mysql转换的问题总结

Oracle到mysql转换的问题总结常用字段类型区别个别语句写法区别1.oracle里只可以用单引号包起字符串,mysql里可以用双引号和单引号。
2.mysql 在select * from () ....,from后面是一个结果集时,括号后面必须加上别名。
3.mysql在delete数据时不能给表加别名,如:delete from table1 T where....,会报错,但是可以这样写:delete T from table1 T where....。
4.Mysql不支持在同一个表中先查这个表在更新这个表,举个例子说明一下,insert into table1values(字段1,(select 字段2 from table1where...)),但是可以在后面那个table1加上别名就没有问题了。
insert into table1values(字段1,(select T.字段2 from table1T where...))5.MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。
ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
也可以自定义函数实现oracle的nextval。
6.翻页的sql语句处理,MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数,例如:select * from table limit m,n,意思是从m+1开始取n条。
常见的函数替换例子:Oracle:select decode(a,b,c,d) as col1 from table1;Mysql:selectcasewhen a=b then cwhen a!=b then dend as col1from table13.oracle的函数ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2),根据col1分组,在分组内根据col2排序,改函数计算的值就表示每组内部排序后的顺序编号。
mysql与oracle之间的数据类型转换

mysql与oracle之间的数据类型转换⼀、常见数据类型在MySQL与Oracle数据库中的表现形式说明mysql oracle变长字符串VARCHAR[0-65535]定义长度默认按字符长度计算,如果是GBK编码的汉字将占⽤2个字节VARCHAR2[1-4000]VARCHAR是VARCHAR2的同义词定义默认按字节长度计算整数TINYINT(-128-127)SMALLINT(-32768-32767)MEDIUMINT(-8388608-8388607)INT(-2147483648-2147483647)BIGINT(-9223372036854775808-9223372036854775807)⽆专⽤类型,TINYINT可以⽤NUMBER(3,0)代替SMALLINT可以⽤NUMBER(5,0)代替MEDUIMINT可以⽤NUMBER(7,0)代替INT可以⽤NUMBER(10,0)代替BIGINT可以⽤NUMBER(20,0)代替ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词数值类型DECIMAL[1-65[,0-30]]NUMERIC是DECIMAL的同义词NUMBER 可表⽰数范围: 1*10^-130⾄1*10^126NUMBER([1-38][,-84-127])DECIMAL、NUMERIC、DEC是NUMBER的同义词浮点型FLOAT(D,M)oracle10g开始增加BINARY_FLOAT类型10g以前⽆专⽤类型,可以⽤NUMBER 代替ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词双精度浮点型DOUBLE(D,M)oracle10g开始增加BINARY_DOUBLE 类型10g以前⽆专⽤类型,可以⽤NUMBER 代替ORACLE中有DOUBLE PRECISION 类型,不过这是NUMBER的同义词位类型BIT(1-64)⽆⽇期类型DATE,3字节存储,只存储⽇期,没有时间,⽀持范围是[1000-01-01]⾄[9999-12-31]TIME,3字节存储,只存储时间,没有⽇期,⽀持范围是[-838:59:59]⾄[838:59:59]DATETIME,占8字节存储,可表⽰⽇期和时间,⽀持范围是[1000-01-01 00:00:00]⾄[9999-12-31 23:59:59]TIMESTAMP,占4字节存储,可表⽰⽇期和时间,范围是DATE类型7字节存储,可表⽰⽇期和时间,⽀持范围是[-4712-01-01 00:00:00]⾄[9999-12-31 23:59:59]可表⽰⽇期和时间,范围是[1970-01-01 00:00:00]⾄[2038-01-19 03:14:07]⾼精度⽇期5.6.4以前不⽀持⼩数秒精度5.6.4开始TIME,DATETIME,TIMESTAMP⽀持,最多可以6位⼩数秒,也就是微秒级别TIMESTAMP[0-9]占⽤空间7-11个字节,当⼩数秒精度为0时与DATE类型相同,⼩数秒最⾼精度可达9位,也就是纳精度年份YEAR,1字节存储,只存储年份,⽀持范围是[1901]⾄[2155]⽆对应类型,可以⽤NUMBER(3,0)代替CHAR[0-255],定义长度默认按字符长度计算,最⼤保存255字符CHAR[1-2000]定义默认按字节长度计算⽀持,⽤于数值类型不⽀持TINYTEXT 最⼤⽀持255个字节TEXT最⼤⽀持65535个字节MEDIUMTEXT最⼤⽀持16MB个字节LONGTEXT最⼤⽀持4GB字节字段不⽀持默认值⽀持(CLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4GB个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG类型,是早期的存储⼤字符串类型,最⼤⽀持2GB字节,现已不推荐使⽤TINYBLOB 最⼤⽀持255个字节BLOB最⼤⽀持65535个字节MEDIUMBLOB最⼤⽀持16MB个字节LONGBLOB最⼤⽀持4GB字节字段不⽀持默认值⽀持(BLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4G个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG RAW类型,是早期的存储⼆进制类型,最⼤⽀持2GB字节,现已不推荐使⽤BINARY(0-255),定长VARBINARY(0-65535),变长RAW(1-2000)ENUM(v1,v2,v3,...),最多65535个元素不⽀持SET(v1,v2,v3,...),最多64个元素不⽀持⽆,MYSQL可以对每个字段指定字符编码⽀持NCHAR(1-2000)NVARCHAR(1-4000)NCLOB不⽀持⽀持⽂件⼤⼩最⼤4GB⽂件名称最长255字符不⽀持⽀持不⽀持⽀持⽀持使⽤简单不⽀持⼀般使⽤SEQUENCE解决,⽤法与⾃增类型差别较⼤,使⽤较复杂,但能实现⾮常灵活的应⽤,包括字符⾃增主键、全局主键等等不⽀持函数和表达式TEXT和BLOB字段类型不⽀持默认值⽀持函数和表达式⽀持,例如,把emp表的id字段顺序放在name字段后⾯:alter table emp modify columnid varchar(20) after name;不⽀持,只能重建表或字段不⽀持11g⽀持,例:create table sales(id number,quantity number,=单价*数量不⽀持 quantity number,price number,amount GENERATED always as(quantity*price) virtual);INNODB 最⼤1000个字段所有字段总定义长度不能超过65535字节所有固定长度字段的总长度不超过半个数据块⼤⼩(数据块⼤⼩⼀般为16K)最⼤1000个字段⼆、MySQL与Oracle数据库常见数据类型对应关系编号ORACLE MYSQL注释1NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表⽰整型;MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不⼀样2Varchar2(n)varchar(n) 3Date DATATIME ⽇期字段的处理MYSQL⽇期字段分DATE和TIME两种,ORACLE⽇期字段只有DATE,包含年⽉⽇时分秒信息,⽤当前数据库的系统时间为 SYSDATE, 精确到秒,或者⽤字符串转换成⽇期型函数TO_DATE(‘2001-08-01','YYYY-MM-DD')年-⽉-⽇ 24⼩时:分钟:秒的格式YYYY-MM-DDHH24:MI:SS TO_DATE()还有很多种⽇期格式, 可以参看ORACLE DOC.⽇期型字段转换成字符串函数TO_CHAR(‘2001-08-01','YYYY-MM-DD HH24:MI:SS')⽇期字段的数学运算公式有很⼤的不同。
ORACLE和MYSQL一些函数和实现效果的对比替换

ORACLE和MYSQL一些函数和实现效果的对比替换Oracle和MySQL是两种常见的关系型数据库管理系统(RDBMS)。
尽管它们有相似的功能和语法,但在一些函数和实现效果方面存在一些差异。
下面是一些Oracle和MySQL函数及其替换或对比的例子:1.数据类型的转换:- Oracle中使用TO_CHAR、TO_NUMBER、TO_DATE等函数来转换数据类型。
而在MySQL中,可以使用CAST或CONVERT函数来实现类似的功能。
2.字符串函数:- Oracle中的函数SUBSTR、INSTR、CONCAT可以在MySQL中使用相同的名称进行替换。
但是在MySQL中,可以使用CONCAT_WS函数实现更多的字符串连接功能。
- 例如,使用SUBSTR函数来截取字符串,在Oracle中可以这样写:SUBSTR('Hello World', 7, 5);而在MySQL中可以这样写:SUBSTRING('Hello World', 7, 5)。
- 在Oracle中使用INSTR函数来查找字符串的位置,比如INSTR('Hello World', 'Wo');而在MySQL中可以使用LOCATE函数实现相同的功能:LOCATE('Wo', 'Hello World')。
3.日期和时间函数:- Oracle和MySQL都提供了一系列的日期和时间函数,如SYSDATE、CURRENT_TIMESTAMP、ADD_MONTHS、DATE_TRUNC等。
很多函数在两个数据库中名称和用法都相似,但也有一些区别。
- 例如,Oracle中的函数ADD_MONTHS可以用于添加月份,而在MySQL中,可以使用DATE_ADD函数实现相同的功能。
- 另一个例子是,Oracle中的函数DATE_TRUNC可以截取日期,如DATE_TRUNC('MONTH', sysdate);而在MySQL中可以使用DATE_FORMAT函数实现类似的效果:DATE_FORMAT(sysdate, '%Y-%m-01')。
mysql和oracle语句有什么区别

mysql和oracle语句有什么区别篇一:Mysql与Oracle的50个区别Mysql与Oracle的50个区别1. 有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.2. Oracle不支持偏移(offset)语法.3. Oracle的复制功能可能比MySQL更加健壮,不过也更加难以配置.4. 对于多个Master类型的系统,大部分用户都希望你使用更加复杂也更加昂贵的Oracle RAC(虽然可能NDB更加健壮).5. Oracle的分区功能非常健壮,但是它不是内置的,并需要专门为此付费(分区功能是在Enterprise Edition里面是内置的).6. 在Linux/Unix上,Oracle并不象Mysql那么方便,很多Linux/Unix发行版默认就会自带Mysql.(我对这一点的理解与翻译可能都有偏差)7. INSERT … ON DUPLICATE KEY UPDATE语法将不再可用,不过你需要学习更加复杂(但是符合SQL标准)的MERGE语法.8. Oracle的ROLE架构与MySQL有很大差异,无法再使用root角色来完整所有工作.(不过Sys用户的权限仍然与root 相差无几,只是为了安全着想,不建议这么使用了).9. Role 帐户与特定的Schema联系在一起(反之也一样),类似于MySQL数据库中的Database概念.(Role并不完全与Schema联系在一起,系统有一些固定的role,这些Role包含部分已经定义好的权限集(privilege set),也可以再自定义部分新的role).10. 事实上,丢弃一切已知的关于连接访问的设置吧,Oracle 使用一套全新的系统来处理连接访问.11. 支持全文搜索,不过语法完全不同.12. Oracle的文档非常丰富,不过,如果需要Oracle的专业服务,你需要拥有Metalink的访问权限.13. 在非数据库社区很难找到相关的支持信息(例如,PHP 论坛或者网站开发者的网志)14. 自增功能可以通过Trigger与sequence对象来实现.15. 大量日常熟悉的SHOW命令将不再可用,想要获取系统信息,需要你学习Oracle的数据字典(或信息Schema),深入一点的还需要学习Oracle动态性能.16. MySQL为信息Schema添加了多个非标准的扩展,在Oracle中将很难找到这些信息.17. 为了管理好生产系统与非生产系统的的转入转出,需要你深入理解Oracle的授权规则.18. 大体上讲,Oracle的数值类型更加简单,如果你确实需要类似于MySQL的多粒度的数值类型,就需要你自己来实现它,或者通过制定不同的精度(Number(n,x))来实现.19. 在Oracle中,表可以做到无限制的增长,但是大部分情况下,都建议通过表空间(tablespace)来对此作细粒度的管理.20. Oracle不支持ALTER TABLE ADD COLUMN BEFORE|AFTER,也就是不支持自己制定字段的位置.(我们这边之前有部分应用对字段顺序有严格地要求,不过,从理论上讲,这是业务设计的问题,主要是其大部分情况下都是使用select *或者insert table values来处理数据,而不是在select,insert中指定具体需要处理的字段名列表).21. 如果你习惯于通过图形界面(GUI)来管理数据库,你一定会喜欢上Oracle,但是如果你倾向于使用类似与Mysql 命令行的客户端,你可能会对sql*plus这个客户端工具感到失望(需要一个习惯的过程,sql*plus还是蛮好用的).22. Oracle的数据校验比Mysql更加严格,依赖于MySQL 的模糊规则可能会导致应用无法运行.MySQL接受”0000-00-00″来作为日期类型的值就是个典型的例子.23. 虽然Oracle的PL/SQL功能更强,但是它不支持标准的PSM语言来编写存储过程,因此你可能不得不学习它的非标准的语法.24. Oracle不支持ENUM数据类型,只能通过使用基于文本的check约束或者创建外键关联表来实现.25. Mysql的一些更加神秘的表类型(例如,blackhole,csv),在Oracle中找不到相对应的功能. (不清楚blockhole是何种类型,不过Oracle的外部表(external table)确实是支持csv格式的,在11g版本中还支持对此文件的压缩/加密以及其他处理). 26. Oracle中的Group By语句必须是确定的,它需要select list中出现的所有列都必须包含在group by从句中.27. Oracle的exp命令输出的dmp文件无法象Mysql的转储文件一样可以手工修改.28. Oracle的底层实现有较大变化,需要你学习UNDO与REDO segment,归档,以及DBWR进程. (个人认为Oracle相对于其他数据库的主要的优势可能就是其UNDO/REDO的设计了.)29. Oracle不是开源软件,因此你无法在上面进行修补/优化/修复/实现你自己的东西.Robert Hodges30. Oracle的查询优化是一件需要专家介入的工作.它的优化器比MySQL的要成熟的多,这意味着查询计划也相应的更加难以解释.如果你有一个大的应用,请准备好聘用一位了解如何有效进行此项工作的伙计.31. Oracle的基于成本的优化器的有效运行需要精确的统计信息.对于发生变化的表,需要定期的为其收集统计信息.批量数据加载进程也需要在处理过程中不时的执行estimate/compute statistics命令来收集统计信息以取得满意的性能.32. 在Oracle中,创建连接是个代价高昂的操作.性能良好的Oracle应用都倾向于使用连接池来最小化登陆的开销.33. Oracle应用需要应用prepared statement以获取可观的性能.如果你的应用不使用prepared statement的话,需要对应用进行调整.这是应用Oracle数据库的标准编程实践.(此处的prepared statement应该更多的是指使用绑定变量).34. 应用需要关闭结果集游标,否则很快就会遇到著名的”ORA-01000 Too many open cursors”错误.在Oracle中,这被认为是一个用户错误,需要你去调整你的代码.35. 繁忙系统上的长查询可能会遭遇到” ORA-01555 Snapshot too old”错误.可以通过调整redo 段的大小(有时通过调整应用)来消除此错误,但是还是需要你关注这一点.(此处的redo segments的表述是有点问题,此处应该是Undo tablespace以及对应的Undo Retention,Oracle没有所谓的redo segment的说法).36. Oracle没有类似于非事务表的概念.大部分Oracle用户都认可这一点.37. Oracle的临时表定义是持久的SQL对象,并且对所有用户都可见(此处应该理解成以此用户登陆的会话,Session).这一点与MySQL中使用的轻量级表有区别,在MySQL中,临时表是在单个会话内创建并销毁的.Denish Patel38. 在Oracle中,多个Alter Table操作不能在同一个SQL 语句中执行,例如alter table emp modify name varchar(64) not null, add gender char(1) not null;39. 默认情况下,Oracle不会自动提交.40. KILL命令在Oracle中无效,它使用alter system kill命令.(不清楚第一个kill是什么概念,操作系统级别的kill,Oracle 还是支持的,我经常使用).41. Oracle在Order by语句中不支持使用减号(-).(不清楚这个具体的减号是什么东西).42. Oracle的sqlplus命令行接口不支持高亮显示.Roland Bouman43. Oracle不支持group_concat或者类似的分组函数.需要你通过循环调取游标来实现,或者通过组合XMLAGG与XMLQUERY来实现你需要的查询.(在Oracle 9R2之后,可以使用自定义聚合函数来实现这个功能,到Oracle 11gR1之后,Oracle自己还提供了一个新的listagg分组函数来实现这个功能).44. 对于count(distinct expression)函数,Oracle只支持一个表达式(要么一个列名,要么*),而Mysql支持一组表达式. (在Oracle中要实现一组表达式,可以通过使用子查询来实现).45. Oracle对子查询的支持非常好.不要因为Mysql中的习惯而不去使用它.46. Oracle不支持用户变量(@num).如果你需要利用它来计算运行时总和,可以利用分析函数(窗口函数)来实现.如果用用户变量来实现特定的汇总函数功能,你将发现Oracle已经有内置得功能支持这些功能.(另外在Oracle中,可以通过在package中应用dbms_session来设置context以实现用户变量).47. Oracle没有区分TIME与DATE类型,Oracle的Date类型实际上就是一个DATETIME类型(但是比MySQL支持一个更大的日期范围).48. 相对于MySQL来讲,Oracle的存储过程与触发器功能与性能都要好很多.不要习惯性地不去使用它们.49. 如果需要在Oracle中编写存储过程,记得在开始编码前花点时间了解下Oracle是不是有相应的内置package.你将发现大部分问题已经解决掉了,或者至少大量的基础代码已经在那儿了.50 如果你在MySQL中有使用BLOB类型或者TEXT类型,你可能会将他们迁移到Oracle地BLOB与CLOB中.然而,与MySQL不同,Oracle并不是透明地实体化这些数据.在大部分情况下,这确实是件好事情,但是它也意味着如果你只是想把BLOB/CLOB当作文本处理,你将需要花费大量琐碎的时间来使用LOB函数,在使用之初,LOB函数还是蛮让人气馁的.(LOB相关函数确实挺烦人,LOB的处理效率也非常差,即使是使用Oracle 11g的SecureFile).篇二:mysql与oracle区别MySQL是遵守双重协议的,一个是GPL(General Public License,公共许可证)授权协议,一个是MySql AB制定的商用授权协议(注释:为解决其他企业用MySQL软件牟利或引用了MySQL的源代码而不想开源)。
Oracle和Mysql操作上的一些区别

Oracle和Mysql操作上的⼀些区别Oracle和Mysql操作上的⼀些区别:1、主键 Mysql⼀般使⽤⾃动增长类型,在创建表时只要指定表的主键为auto_increment,插⼊记录时,不需要再指定该记录的主键值,Mysql将⾃动增长;Oracle没有⾃动增长类型;2、第三⽅数据库管理⼯具 Mysql使⽤sql yog、Navicat for MySQL、MySQL Workbench(mysql 所在公司开发) Oracle使⽤PL/SQL 、 plus(oracle安装时⾃带)3、结果集⾏数限制-分页查询 Mysql使⽤limit关键字实现; Oracle使⽤ROWNUM关键字实现。
Oracle中ROWNUM不是某个表中的字段名,⽽是从⼀个表中查询数据时,oracle系统⾃动为查询结果返回的⾏按顺序的给出的编号; ORACLE写法如下: 3.1 rownum对于⼩于某值的查询条件的处理 3.2 rownum对于⼤于某值的查询条件的处理 可以使⽤⼦查询⽅法来解决,需要注意的是,⼦查询中的rownum必须要定义别名,因为rownum不是某个表的列,如果不给定别名的话,⽆法知道rownum是⼦查询的列还是主查询的列。
4、数据类型⽐较 4.1 Mysql中的set类型和enum类型,oracle不⽀持。
4.2 Oracle中的NUMBER类型,可以⽤来表⽰mysql中int型和decimal类型。
⽐如:DECIMAL就是NUMBER(10,2)这样的结构INT(10)就是是NUMBER(10),表⽰整型; MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不⼀样; 4.3 Oracle中的date类型,相当于mysql中的datetime类型5、多表查询全连接的区别 Mysql的全连接: 说明:mysql利⽤左连接和右连接分别查询出左右两边的数据, 然后利⽤union去掉两边都有的重复数据,并合并查询结果。
Oracle与MySQL的差异与迁移指南

Oracle与MySQL的差异与迁移指南概述:Oracle与MySQL是两种广泛使用的关系型数据库管理系统(RDBMS)。
尽管它们都属于关系型数据库,但是在架构、功能和语法上存在一些明显的差异。
本文将探讨Oracle与MySQL之间的差异,并提供一些迁移指南,以帮助用户将其数据库从Oracle迁移到MySQL。
一、架构差异1. 数据库模型Oracle采用了客户端-服务器模型,其中数据库引擎和客户端应用程序在不同的计算机上运行。
而MySQL则采用了更简单的单一服务器模型。
2. 存储引擎Oracle内置了自己的多种存储引擎,如InnoDB、MyISAM、BDB等。
而MySQL则主要使用InnoDB和MyISAM两种存储引擎。
这些存储引擎在功能和性能上有所不同,需要根据具体需求选择。
3. 备份与恢复Oracle提供了强大且复杂的备份和恢复功能,如逻辑备份、物理备份、灾难恢复等。
而MySQL则相对简单,主要使用物理备份。
二、功能差异1. 事务处理Oracle提供了强大的事务处理功能,支持ACID(原子性、一致性、隔离性、持久性)特性,能够确保数据库的数据完整性和一致性。
MySQL也支持事务处理,但是在某些情况下可能需要手动设置事务隔离级别。
2. 触发器与存储过程Oracle支持复杂的触发器和存储过程语法,使得开发人员可以在数据库内部实现业务逻辑。
MySQL也支持触发器和存储过程,但是语法和功能相对简单。
3. 分区与分片Oracle支持表的分区和分片,可以将大型表分割成多个小片段,提高查询和维护的效率。
MySQL在某些版本中也开始支持分区和分片功能。
三、语法差异1. 数据类型Oracle的数据类型较为复杂,如NUMBER、VARCHAR2、DATE等,支持更多的数值和字符类型。
MySQL的数据类型相对较少,如INT、VARCHAR、DATETIME等。
2. SQL语法Oracle和MySQL在SQL语法方面存在一些差异。
mysql与ORACLE查询转换简单对比

ORACLE与MySql查询转换一、准备1)MySql和ORALCE表定义一致:create table t1(col1int primary key,col2int,col4int,col6int);2)ORACLE PL/SQL装载数据:declarev_count pls_integer:=0;beginfor ii in1..50000loopv_count:=mod(ii,21);dbms_output.put_line(v_count*3);insertinto t1(col1,col2,col4,col6)values(ii,ii*1,v_count*2,v_count*3);commit;end loop;end;3)MySql存储过程装载数据DELIMITER//CREATE PROCEDURE load_part_tab()begindeclare v int default0;while v<50000doinsert into part_tabvalues(v,v*1,v*2,v*3);set v=v+1;end while;end;//DELIMITER;二、实验过程测试对象:SELELCT语句。
对象内容:select*from t1where col1>45000and col1>49990;1)ORACLE测试过程:SQL*Plus:Release11.2.0.1.0Production on星期四7月3109:55:392014Copyright(c)1982,2010,Oracle.All rights reserved.连接到:Oracle Database11g Enterprise Edition Release11.2.0.1.0-Production With the Partitioning,OLAP,Data Mining and Real Application Testing optionsSQL>select*from t1where col1>45000and col1>49990;COL1COL2COL4COL6----------------------------------------49991112233499921224364999313263949994142842499951530454999616324849997173451499981836544999919385750000204060已选择10行。
oracle和mysql几点差异对比

oracle和mysql⼏点差异对⽐Oracle与mysql差异性总结之前有个项⽬是⽤oracle数据库进⾏开发,需要把数据库改成mysql,遇到了⼀些地⽅需要注意的,就简单记了下来。
备注:再把oracle转成mysql的时候,表中字段的类型转换是⽐较头疼的,⽐如oracle中的number转成mysql的时候,你要从“FLOAT、DOUBLE、TINYINT、 SMALLINT、MEDIUMINT、INT、BIGINT”中选择⼀个合适的,其他数据类型同理;⼯具转的话经常就会把你带进坑⾥了。
坑爹,⼀不⼩⼼就报错了,这个错误排查起来还⽐较⿇烦,只有细⼼应对。
⼀、WM_CONCAT对应GROUP_CONCAT;⼆、ronum可⽤limit代替;三、sys_guid()⽤uuid()代替四、add_months(t2.maxTime,-12)⽤date_add(t2.maxTime,interval -12 month)代替;date_format(date,'%Y-%m-%d')-->oracle中的to_char();str_to_date(date,'%Y-%m-%d')-->oracle中的to_date();%Y:代表4位的年份%y:代表2为的年份%m:代表⽉, 格式为(01……12)%c:代表⽉, 格式为(1……12)%d:代表⽉份中的天数,格式为(00……31)%e:代表⽉份中的天数, 格式为(0……31)%H:代表⼩时,格式为(00……23)%k:代表⼩时,格式为(0……23)%h:代表⼩时,格式为(01……12)%I:代表⼩时,格式为(01……12)%l :代表⼩时,格式为(1……12)%i:代表分钟, 格式为(00……59)%r:代表时间,格式为12 ⼩时(hh:mm:ss [AP]M)%T:代表时间,格式为24 ⼩时(hh:mm:ss)%S:代表秒,格式为(00……59)%s:代表秒,格式为(00……59)例⼦:select case when add_months(t2.maxTime,-12)>t1.minTime then to_char(add_months(t2.maxTime,-12),'yyyy-MM') else to_char(t1.minTime,'yyyy-MM') end as startTime,to_char(t2.maxTime,'yyyy-MM') as endTime from(select min(t.log_time) as 转为:select case when date_add(t2.maxTime,interval -12 month)>t1.minTime then date_format(date_add(t2.maxTime,interval -12 month),'%Y-%m') else date_format(t1.minTime,'%Y-%m') end as startTime,date_format(t2.maxTime,'%Y-%m'五、oracle中:to_char(number)把number转成varchar2,在mysql中⽤concat(number)六、oracle中:to_number在mysql中可以⽤cast或者convert七、Oracle中记录⾏号⽤Rownum RN;在mysql中:Select UID,(@rowNum:=@rowNum+1) as rowNo From a,(Select (@rowNum :=0) ) b Order by a.Money Desc;⼋、SmRappfucauthEntityMapper.xml中的insert:merge into九、在mapper.xml中,oracle语法:AND rolename like '%'||#{rolename}||'%'Mysql语法:AND rolename like CONCAT(CONCAT('%',#{rolename ,jdbcType=VARCHAR}),'%')⼗、mysql报错:mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同⼀表中的某些值,再update这个表(在同⼀语句中)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
msyql中没有TO_CHAR这样的通用格式转换函数,所以有几个几个不同的格式函数分开使用,我遇到最经常使用的为转换数字格式和转换时间格式:
1. oracle中的to_char(int, text), to_char(float, text), to_char(numeric, text)
作用:将各种类型的数据转换成特定的格式,其中text为想要转换成为的模板,例如9999.999等。
Mysql:format(number,int) ,其中int的值为想要保留的小数位数。
2. oracle中的TO_CHAR(date,yyyymmdd),
作用:将date类型的数据转换成固定格式的的字符串格式,其中yyyymmdd为想要转换成为的日期格式。
Mysql:date_formate(date,’%Y%m%d’)将时间类型字段格式为字符串格式
与上面那个函数功能正好相反的是str_to_date(string,,'%m.%d.%Y')函数,作用是将字符串类型字段格式为date数据,相当于oracle中的to_date函数。
oracle和mysql的星期返回:
oracle返回某个日期的星期值的写法是:
to_char(to_date(m.ldate,'YYYYMMDD')-1,'d') -- oracle 返回的是星期1到星期7
mysql 的改写方法为
DATE_FORMAT(m.date,'%w') WHEN 0 THEN 7 ELSE DATE_FORMAT'm.nextselldate,' %w') END -- msyql 返回的是星期1到星期0
说到时间,我们经常可以看到,在oracle数据库中把字段的默认值设为插入的当前时间,如:
alter table tablename add col date default sysdate
在mysql中获取当前时间的函数为now(),但是不支持将函数设为字段的默认值,所以我们可以使用timestamp来设置为默认时间,如:
Alter tablename add column
timestamp date DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTA MP
如果有需要的话,可以使用上面提到的date_format函数来将timestamp转换成合适的字符串。
格式如下:To_number(varchar2 or char,’format model’)
oracle中还有一个经常使用的格式转换函数就是to_number,作用是将一些处理过的按一定格式编排过的字符串变回数值型的格式。
其常用格式为:
to_number(varchar2 or char,’format model’)
在mysql中我们使用cast()来对这种情况进行处理,但要填适当的类型,例如:
cast(char as unsigned int) /*整型*/
cast(char as decimal(10,2)) /*浮点型*/
同时mysql中的cast()函数还能用取浮点型小数的整数部分,例如cast(-1.002 as int),这对应的是oracle中的trunc()函数。