marty001 发表于 2018-9-12 11:53:13

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
  将子查询先建成一个视图,然后再建立视图进行关联
  CREATEVIEWView_bbas select id from bb;
  select a.* from aa a inner joinView_bb   b on a.id=b.id
  http://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 LIKEREPLACE (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:=@rownum+1 AS rownum , frutas.*
  FROM (SELECT @rownum:=0) r , frutas;
  mysql> SELECT @rownum:=@rownum+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:=@rownum+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.html
  mysql中的find_in_set:
  方法1---SELECT * FROM jiu WHERE `jiu` like 1%; (用like的方法实现)
  方法2---SELECT * FROM jiu WHERE FIND_IN_SET('1','jiu');
  oracle中取前几行数据rownum
页: [1]
查看完整版本: oracle改造mysql主要改造点