mysql改造oracle_oracle改造mysql主要改造点

insert into DCLLJOBINFO (JOBID, JOBNAME, FIRSTRUN, LASTRUNBEGIN, LASTRUNEND, RUNCOUNT) values (‘4‘, ‘group-FileIsDealRmonColl_1.FileIsDealRmonColl_1-job-4‘, to_DATE (‘21-07-2011 14:09:20‘, ‘dd-mm-yyyy hh24:mi:ss‘), to_DATE (‘09-01-2012 16:06:09‘, ‘dd-mm-yyyy hh24:mi:ss ‘), to_DATE (‘09-01-2012 16:06:11‘, ‘dd-mm-yyyy hh24:mi:ss‘), 12112);

yyyy-mm-dd

mysql

str_to_date (‘2008-4-2 15:3:28‘,‘ %Y-%m-%d %H:%i:%s ‘);

insert into DCLLJOBINFO (JOBID, JOBNAME, FIRSTRUN, LASTRUNBEGIN, LASTRUNEND, RUNCOUNT) values (‘4‘, ‘group-FileIsDealRmonColl_1.FileIsDealRmonColl_1-job-4‘, str_to_date (‘21-07-2011 14:09:20‘, ‘%d-%m-%Y %H:%i:%s‘), str_to_date (‘09-01-2012 16:06:09‘, ‘%d-%m-%Y %H:%i:%s‘), str_to_date (‘09-01-2012 16:06:11‘, ‘%d-%m-%Y %H:%i:%s‘), 12670);

%Y-%m-%d %H:%i:%s

to_CHAR (generant_time, ‘%m/%d‘)       DATE_FORMAT(generant_time, ‘%m/%d‘)

to_CHAR ( ENABLE )   enable 为int型       concat(ENABLE,‘‘)

建视图时的子查询问题

select * from aa as a,(select id from bb) as b where a.id=b.id

mysql

将子查询先建成一个视图,然后再建立视图进行关联

CREATE  VIEW  View_bb  as select id from bb;

select a.* from aa a inner join  View_bb   b on a.id=b.idhttp://blog.csdn.net/lele2426/article/details/7519559截取字符串

SUBSTR (unit_id, 0 , 5 )         改为   SUBSTRING (unit_id, 1, 5)

generant_time > SYSDATE - 8    改为  WHERE generant_time > now() - interval 8 day

注释:日期直接加减的含义不同了,比如Oracle中sysdate + 1 变成了sysdate() + interval 1 day(注意如果写成sysdate() + 1 语法还是正确的,但含义是错误的)

数据类型的替换

date----datetime     number----int          varchar2-------varchar

mysql中如何标记主外表(http://hi.baidu.com/thinkinginlamp/blog/item/ac488618104447be4aedbcfe.html)

oracle中的 nvl() 方法 在mysql中用 IFNULL() 替换

如果你某个字段为空,但是你想让这个字段显示0

nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3……

oracle中的 decode() 函数 在mysql中用case ...when....then....when...then...end

select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary*1.15) from employee 是不是很简洁? DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else

SELECT DECODE (SUBSTRING(TB1.UNIT_ID,0,5),‘10-10‘,‘主机‘,‘10-11‘,‘数据库‘,‘10-12‘,‘中间件‘,‘10-13‘,‘网络设备‘) NAME

SELECT ( case SUBSTR(TB1.UNIT_ID, 1, 5) when ‘10-10‘ then ‘主机‘ when ‘10-11‘ then ‘数据库‘ when ‘10-12‘ then ‘中间件‘ when ‘10-13‘ then ‘网络设备‘ end ) NAME

orcale中的主外表,在mysql中如何标记

SELECT DECODE(SUBSTRING(TB1.UNIT_ID,0,5),‘10-10‘,‘主机‘,‘10-11‘,‘数据库‘,‘10-12‘,‘中间件‘,‘10-13‘,‘网络设备‘) NAME,"

+ " TB1.UNIT_ID, TB1.STEPSUM, IFNULL(TB2.STEP1,0) STEP1 ,IFNULL(TB3.STEP1,0) STEP2,IFNULL(TB4.STEP1,0) STEP3, (TB1.STEPSUM-(IFNULL(TB2.STEP1,0))-(IFNULL(TB3.STEP1,0))-(IFNULL(TB4.STEP1,0))) step4 "

+ " FROM (SELECT substring(KBP_CLASS,0,5) UNIT_ID, COUNT (*) STEPSUM FROM V_ASSET_ALL WHERE KBP_CLASS LIKE ‘10-%‘ GROUP BY substring(KBP_CLASS,0,5)) TB1, "

+ " ("

+ getPTEventClass("1")

+ ") TB2,("

+ getPTEventClass("2")

+ ") TB3, ("

+ getPTEventClass("3")

+ ") TB4 "                 + " WHERE TB1.UNIT_ID = TB2.UNIT_ID( + ) AND TB1.UNIT_ID = TB3.UNIT_ID( + ) AND TB1.UNIT_ID = TB4.UNIT_ID (+ ) ORDER BY UNIT_ID

改为

SELECT (case SUBSTR(TB1.UNIT_ID, 1, 5) when ‘10-10‘ then ‘主机‘ when ‘10-11‘ then ‘数据库‘ when ‘10-12‘ then ‘中间件‘ when ‘10-13‘ then ‘网络设备‘ end) NAME,"

+ " TB1.UNIT_ID, TB1.STEPSUM, IFNULL(TB2.STEP1,0) STEP1 ,IFNULL(TB3.STEP1,0) STEP2,IFNULL(TB4.STEP1,0) STEP3, (TB1.STEPSUM-(IFNULL(TB2.STEP1,0))-(IFNULL(TB3.STEP1,0))-(IFNULL(TB4.STEP1,0))) step4 "

+ " FROM (SELECT SUBSTR(KBP_CLASS,1,5) UNIT_ID, COUNT(*) STEPSUM FROM V_ASSET_ALL WHERE KBP_CLASS LIKE ‘10-%‘ GROUP BY SUBSTR(KBP_CLASS,1,5)) TB1 "

+ " left outer join ("

+ getPTEventClass("1")

+ ") TB2 on TB1.UNIT_ID = TB2.UNIT_ID left outer join ("

+ getPTEventClass("2")

+ ") TB3 on TB1.UNIT_ID = TB3.UNIT_ID left outer join ("

+ getPTEventClass("3")

+ ") TB4 on TB1.UNIT_ID = TB4.UNIT_ID "                 + " ORDER BY UNIT_ID

oracle中的 replace() 函数    replace(‘将要更改的字符串‘,‘被替换掉的字符串‘,‘替换字符串‘)

oracle中的 | | 是连接符

如 TB2.UNIT_ID LIKE  REPLACE (TB1.UNIT_ID, ‘:‘, ‘%‘) || ‘%‘       将 REPLACE (TB1.UNIT_ID, ‘:‘, ‘%‘)与%连接起来

mysqle中代替oracle中的连接符 TB2.UNIT_ID LIKE   concat (REPLACE (TB1.UNIT_ID, ‘:‘, ‘%‘) ,‘%‘)

注意:oracle函数与()之间可以有空格,mysql不能有

oracle中的 rownum     rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2, 依此类推,这个伪字段可以用于限制查询返回的总行数

在mysql中没有伪字段

当mysql中需要查询伪字段时 (如序号)

mysql> SELECT * FROM frutas;

+-----------+----------+

| nombre | color |

+-----------+----------+

| fresa | rojo |

| platano | amarillo |

| manzana | verde |

| uva | verde |

| pera | verde |

| mandarina | naranja |

| melocoton | marron |

| limon | amarillo |

+-----------+----------+

8 rows in set (0,00 sec)

SELECT @rownum:[email protected]+1 AS rownum , frutas.*

FROM (SELECT @rownum:=0) r , frutas;

mysql> SELECT @rownum:[email protected]+1 AS rownum, frutas.*

-> FROM (SELECT @rownum:=0) r, frutas;

+--------+-----------+----------+

| rownum | nombre | color |

+--------+-----------+----------+

| 1 | fresa | rojo |

| 2 | platano | amarillo |

| 3 | manzana | verde |

| 4 | uva | verde |

| 5 | pera | verde |

| 6 | mandarina | naranja |

| 7 | melocoton | marron |

| 8 | limon | amarillo |

+--------+-----------+----------+

8 rows in set (0,00 sec)

但是如何把这个查询放在 create view 里面

mysql> CREATE VIEW vw_frutas AS SELECT @rownum:[email protected]+1 AS rownum, frutas.*

-> FROM (SELECT @rownum:=0) r, frutas;

ERROR 1351 (HY000): View‘s SELECT contains a variable or parameter

oracle中的 TO_NUMBER() 函数   将char型改为number型

mysql中用cast()代替

如:TO_NUMBER(PARENT_ID)

cast(PARENT_ID as SIGNED INTEGER)

oracle中的  String(number, character)      number 必要参数;Long。返回的字符串长度。如果 number 包含 Null,将返回 Null。

character 必要参数;Variant。为指定字符的字符码或字符串表达式,其第一个字符将用于建立返回的字符串。如果 character 包含 Null,就会返回 Null

oracle中的 分页   mySql = this.getLimitString(mySqlCount, this.pagination);

mysql中的分页   mySql = mySqlCount + " limit " +pagination.getFirstRownum()+","+pagination.getPageSize();

Oracle中 start with...connect by prior 子句用法 connect by 是结构化查询中用到的,其基本语法是:

select ... from tablename start with 条件1

connect by 条件2

where 条件3;

例:

select * from table

start with org_id = ‘HBHqfWGWPy‘

connect by prior org_id = parent_id;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:

org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。

条件3 是过滤条件,用于对返回的所有记录进行过滤。

mysql 实现oracle start with connect by递归http://blog.sina.com.cn/s/blog_8317516b0100v4nf.htmlmysql中的find_in_set:

方法1---SELECT * FROM jiu WHERE `jiu` like 1%; (用like的方法实现)

方法2---SELECT * FROM jiu WHERE FIND_IN_SET(‘1‘,‘jiu‘);

oracle中取前几行数据  rownum <=10

mysql中用LIMIT 0,10(10是返回最大行数)

KBP_CLASS(unit_id.split( ":" )[0])  unit_id用:分割取第一列为 KBP_CLASS

mysql中的delet不支持别名

mysql中的delete语句不支持起别名

mysql中的 delete from 表名 where 。。。  中的from不能省去,oracle中可以省去

mysql中的Insert语句不支持插入的项中先查询再插入  解决办法http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631050843a4113dc3b6780c7150884cd15c6735b364065b2fd7a3510738298237a05a44356f7f53372350324a3de95c81cd2e4d9696cd630340147da0045935fb8cb376e9c67875a98fe4abbadf043d5b9d2a29e16049b08513197f0fa1c53549f38b6033192e0ca184b0807ba9c27658e4e7659d97357b737eee7467906f1b7961d5bc25ac7666580ae45f26055e004a56f5e7314b74dc11f565227e13f67b9046a5385eb2cf02a085722c61ceef9d6b69a0fce8ab977&p=9e759a46d0c417fc57e6d23a135989&user=baidu&fm=sc&query=mysql+INSERT+You+can%27t+specify+target+table+%27TB%5FSYS%5FPLUGWEB%5FRTREE%27+for+update+in+FROM+cla&qid=8b70fbba4801eaf3&p1=6ORACLE中   SELECT MAX ( ID )+ 1 AS ID FROM SJDBCMANAGER    若相同方式写入mysql,mysql会是小数,oracle会是整数

如想mysql与oracle一样   改为SELECT round (MAX(ID)+1) AS ID FROM SJDBCMANAGER

或者 SELECT cast (MAX(ID) as unsigned int )+1 as ID FROM SJDBCMANAGER

oracle中 minus  两个关联表的符合条件记录的交集,是于union作用相反.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,并没有to_date()函数。to_date()函数是Oracle数据库中的一个函数,用于将字符串转换为日期格式。如果你想在MySQL中进行日期格式的转换,可以使用STR_TO_DATE()函数。STR_TO_DATE()函数的用法与to_date()函数类似,可以将指定的字符串按照指定的格式转换为日期类型。例如,如果要将字符串'2011-09-20 08:30:45'转换为日期格式,可以使用以下语句: STR_TO_DATE('2011-09-20 08:30:45', '%Y-%m-%d %H:%i:%s') 其中,'%Y-%m-%d %H:%i:%s'表示日期的格式,具体的格式说明可以参考MySQL的官方文档。请注意,MySQLOracle在函数的名称和用法上可能存在差异,所以在使用函数时需要根据具体的数据库来选择合适的函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [oracle to_date函数和mysql DATE_FORMAT函数用法](https://blog.csdn.net/weixin_34282558/article/details/113166809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [oracle to_date(函数格式)](https://blog.csdn.net/weixin_35934226/article/details/116468560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值