1.MyBatis中的 foreach标签使用区别:
<!-- oracle -->
<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>
<!-- mysql -->
<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的编码
|