根据sql去O改造中用到的一些oracle转mysql的语法和经验进行总结:
1、 to_char对日期格式化
oracle: to_char(d.expire_date,'yyyymmddhhmiss')
mysql: date_format(d.expire_date,'%Y%m%d%H%i%s')
2、 decode转case when
oracle: decode(t.BUSIHALL, 'web', '网厅', 'wap', '掌厅') 营业厅,
mysql: CASE t.BUSIHALL WHEN 'web' THEN '网厅' WHEN 'wap' THEN '掌厅' END 营业厅,
3、 nvl转ifnull
oracle: SUM(NVL(T.COUNT_NUMBER, 0)) AS 统计值
mysql: SUM(IFNULL(T.COUNT_NUMBER,0)) AS 统计值
4、 sysdate获取系统时间
oracle: sysdate
mysql: sysdate() 或者 now()
5、 to_date对日期格式化
oracle: to_date('2018-01-09','yyyy-MM-dd')
mysql: str_to_date('2018-01-09','%Y-%m-%d')
6、 ||拼接的转换
oracle: STREET_NAME||HOUSE_NUMBER
mysql: CONCAT(STREET_NAME,HOUSE_NUMBER)
7、 count统计
oracle: count(*)
mysql: count(1)
8、 trunc截取的转换
oracle: trunc(sysdate)
mysql: date_format(sysdate(),'%Y-%m-%d 00:00:00')
9、 对日期进行加减
oracle: sysdate-30
mysql: date_add(sysdate(),INTERVAL -30 DAY)
oracle: select * from ( )
mysql: select * from ( ) as t
oracle: to_char(t.tamount / 100, '9999990.00') 缴费金额元,
mysql: round(t.tamount / 100, 2) 缴费金额元,
12、往前推x分钟 sysdate-x/24/60
oracle: sysdate - x/24/60
mysql: DATE_ADD(sysdate(),INTERVAL - x MINUTE)
13、to_number()数字转换
oracle: to_number(t.count_sort)
mysql: cast(t.count_sort as unsigned int)
14、序列改造
MySQL没有Oracle中的Sequence对象,所以不能直接使用sequence对象获取nextVal。
①hibernate的配置文件中序列改造
before: <generator class="sequence" >
<param name="sequence" >SEQ_TD_PTL_USER_AWD</param>
</generator>
after: <generator class="com.sitech.common.util.Sequence">
<param name="sequence">SEQ_TD_PTL_BROAD_RECORD</param>
</generator>
before: <generator class="native" />
after: <generator class="com.sitech.common.util.Sequence"></generator>
②Java中的序列改造