1.MyBatis中的 foreach标签使用区别:
- <if test="dbType=='oracle'">
- <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
- update test set name=${item.name} where seq=${item.seq}
- foreach>
- if>
- <if test="dbType=='mysql'">
- <foreach collection="list" item="item" index="index" open="" close="" separator=";">
- update test set name=${item.name} where seq=${item.seq}
- foreach>
- if>
2.like 的使用区别:
- oracle:where seq like #{seq} || '%'
-
- mysql: where seq like concat(#{seq},'%')
-
- b.name like CONCAT(CONCAT('%',#{name}),'%')
3. 函数通过子类查询到父类:
3.1 函数通过子类查询到父类
Oracle:
- select *
- from test a
- connect by a.unit_code = prior a.para_unit_code
- start with a.unit_code = #{unitCode}
- order by a.unit_code asc
MySQL:
- select *
- from test a
- find_in_set(a.unit_code,(select getparentunitlist (#{unitCode})))
- order by a.unit_code asc
MySQL的 find_in_set函数的使用:
https://www.jb51.net/article/143105.htm
MySQL自定义函数,实现父子查询getparentunitlist函数的使用:
https://blog.csdn.net/qq_28428687/article/details/79107818?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-79107818.pc_agg_new_rank&utm_term=MySQL%E7%9A%84getparentlist%E5%87%BD%E6%95%B0&spm=1000.2123.3001.4430
3.1 函数通过父类查询到子类:
- <select id="getChildrenArea" resultType="java.lang.String" databaseId="oracle">
- select
- AREA_SEQ
- from test_area aua
- start with aua.area_seq = #{areaSeq}
- connect by prior aua.area_seq = aua.parent_area_seq
- select>
-
- <select id="getChildrenArea" resultType="java.lang.String" databaseId="mysql">
- select
- AREA_SEQ
- from test_area aua where
- FIND_IN_SET (aua.AREA_SEQ, getChildareaLst(#{areaSeq}))
- select>
4. 字段转换:
Oracle中 wm_concat() 函数的使用:
wm_concat()函数是oracle行列转换函数,该函数可以把列值以‘,’分割开来,并显示成一行。
Oracle中 over(order by )分区转换、 over(order by )连续转换函数的使用:
地址:
https://blog.csdn.net/iteye1011/article/details/12782887?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&utm_relevant_index=2
5. 当前时间的获取:
Oracle:SYSDATE
MySQL:NOW()
6.mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间:
- https://www.jb51.net/article/132425.htm
- 1、当前日期
- select DATE_SUB(curdate(),INTERVAL 0 DAY) ;
- 2、明天日期
- select DATE_SUB(curdate(),INTERVAL -1 DAY) ;
- 3、昨天日期
- select DATE_SUB(curdate(),INTERVAL 1 DAY) ;
7.Oracle数据库获取前一天日期、当月第一天日期
- 获取前一天日期SQL:select to_char(sysdate-1,'yyyy-mm-dd') from dual
- 获取当月第一天日期SQL:select to_char(sysdate-1,'yyyy-mm')||'-01' from dual
-
- <if test="@com.minstone.apprEfficiency.common.constant.ConfigConstant@DBTYPE =='oracle'">
- and to_char(h.SCSJSJ,'yyyy-MM-dd') >= to_char(sysdate -1,'yyyy-mm-dd')
- </if>
- <if test="@com.minstone.apprEfficiency.common.constant.ConfigConstant@DBTYPE =='mysql'">
- and to_char(h.SCSJSJ,'yyyy-MM-dd') >= date_sub(curdate(), interval 1 day )
- </if>
8.时间格式的转换:
- 注意:Oracle是不区分大小写的
- <if test="dbType=='oracle'">
- TO_CHAR(A.UPDATE_TIME,'YYYY-MM-DD HH24:MI:SS') AS UPDATE_TIME
- if>
- <if test="dbType=='mysql'">
- DATE_FORMAT(A.UPDATE_TIME,'%Y-%m-%d %H:%i:%s') AS UPDATE_TIME
- if>
10 mysql的 if 和oracle 的 decode
https://blog.csdn.net/nimeijian/article/details/50470189?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-16.pc_relevant_antiscanv2&utm_relevant_index=17
总结:
通过比较,可以发现:
ifNull(exp1,exp2)类似于nvl(exp1,exp2);
if(exp1,exp2,exp3)类似于nvl2(exp1,exp2,exp3);
CASE WHEN 类似于DECODE()。
11.字符集问题:
- https://www.cnblogs.com/youjianjiangnan/p/9114791.html
- mysql修改表,字段的字符集
- http://blog.itpub.net/29254281/viewspace-1285916/
字符集问题比较恶心,之前遇到的问题建库的时候设置的是gbk的字符集(好像这样的字符集外文 会乱码),但是生产环境存在大量的数据,又不能修改字符集,所以当时是把外文字段base64编码之后存入数据库,取出来的时候再解码,非常的繁琐。请注意,后续建库建表的时候请设置好。巨大的坑啊。数据库被设置为gbk的编码