oracle与mysql转换工具类

import org.apache.commons.lang3.math.NumberUtils;

public class DBTUtil {
    public static String to_char(String val , int format){
        String returnValue = "";
        if (val.contains("@")){
            int day = NumberUtils.toInt(val.substring(1,val.length()));
            val = currentDate(day);
        }
        if (format == 1) {
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y-%m-%d')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y-%m-%d')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyy-mm-dd')";
            }
        } else if (format == 2) {
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y-%m-%d %T')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y-%m-%d %H:%M:%S')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyy-mm-dd hh24:mi:ss')";
            }
        } else if (format == 3) {
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y-%m-%d %H:%i')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y-%m-%d %H:%M')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyy-mm-dd hh24:mi')";
            }
        } else if (format == 4) {
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y-%m-%d %H')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y-%m-%d %H')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyy-mm-dd hh24')";
            }
        }else if(format==5){
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y%m%d')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y%m%d')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyymmdd')";
            }
        }else if(format==6){
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y%m')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y%m')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyymm')";
            }
        } else if (format == 7) {
            if (DbUtil.isMysql()) {
                returnValue = "date_format(" + val + ",'%H')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char(" + val + ", '%H')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char(" + val + ",'hh24')";
            }
        }else if(format==8){
            if (DbUtil.isMysql()) {
                returnValue = "date_format("+val+",'%Y')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_char("+val+", '%Y')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_char("+val+",'yyyy')";
            }
        }
        return returnValue;
    }


    public static String current() {
        String returnValue = null ;
        if (DbUtil.isInformix()) {
            returnValue = "current";
        } else if (DbUtil.isOracle()) {
            returnValue = "sysdate";
        } else if (DbUtil.isMysql()) {
            returnValue = "now()";
        }
        return returnValue;
    }

    public static String current(int days) {
        String returnValue = null ;
        if (DbUtil.isInformix()) {
            returnValue = "current";
        } else if (DbUtil.isOracle()) {
            returnValue = " sysdate + "+days;
        } else if (DbUtil.isMysql()) {
            returnValue = " DATE_ADD(NOW(),INTERVAL "+(days)+" DAY)";
        }
        return returnValue;
    }

    public static String currentStr(String days) {
        String returnValue = null ;
        if (DbUtil.isInformix()) {
            returnValue = "current";
        } else if (DbUtil.isOracle()) {
            returnValue = " sysdate + " + days;
        } else if (DbUtil.isMysql()) {
            returnValue = " DATE_ADD(NOW(),INTERVAL "+(days)+" DAY)";
        }
        return returnValue;
    }

    /**
     * 当前日期之前、之后时间
     * @param days
     * @return
     */
    public static String currentDate(int days) {
        String returnValue = null ;
        if (DbUtil.isOracle()) {
            returnValue = " trunc(sysdate +"+days+") ";
        } else if (DbUtil.isMysql()) {
            returnValue = " DATE_SUB(CURDATE(),INTERVAL -"+(days)+" DAY) ";
        }

        return returnValue;
    }

    public static String truncBeforeDayMonthFormat(int days){
        if (DbUtil.isOracle()) {
            return " TRUNC(SYSDATE-"+days+", 'MM') " ;
        }else {
            return " DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())+"+days+" DAY) " ;
        }
    }

    /**
     * 向日期添加指定的时间间隔
     * @param pMonth
     * @param month
     * @return
     */
    public static String addMonth(String pMonth, int month){
        String returnValue = null ;
        if (DbUtil.isOracle()) {
            returnValue = " trunc(add_months(" + pMonth + " ," + month + "),'dd') ";
        } else if (DbUtil.isMysql()) {
            returnValue = "DATE_ADD(" + pMonth + ",INTERVAL " + (month) + " MONTH)";
        }

        return returnValue;
    }

    /**
     * 返回to_date(),只返回日期,不包括时间
     *
     * @return
     */
    public static String to_date(String value) {
        if (value == null || "".equals(value)) {
            return "";
        }
        String returnValue = "";
        // value : '2007-01-01 01:01:01' OR value : '2007-01-01'
        String[] datetime = value.split(" ");

        if (datetime.length == 1) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date('" + value + "','%Y-%m-%d')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date('" + value + "', '%Y-%m-%d')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date('" + value + "','yyyy-mm-dd')";
            }
        } else if (datetime.length == 2) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date('" + value + "','%Y-%m-%d %T')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date('" + value + "', '%Y-%m-%d %H:%M:%S')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date('" + value
                        + "','yyyy-mm-dd hh24:mi:ss')";
            }
        }

        return returnValue;
    }

    public static String to_date(String val , int format) {
        String returnValue = "";

        if (format == 1) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m-%d')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m-%d')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date('"+val+"','yyyy-mm-dd')";
            }
        } else if (format == 2) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m-%d %T')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m-%d %H:%M:%S')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date('"+val+"','yyyy-mm-dd hh24:mi:ss')";
            }
        }else if(format == 3){
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date('"+val+"','yyyy-mm')";
            }
        }

        return returnValue;
    }


    /**
     * 有些数据库字段传进来,不加引号,用此方法
     * @param val
     * @param format
     * @return
     */
    public static String to_sql_date(String val , int format) {
        String returnValue = "";

        if (format == 1) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m-%d')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m-%d')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date("+val+",'yyyy-mm-dd')";
            }
        } else if (format == 2) {
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m-%d %T')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m-%d %H:%M:%S')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date("+val+",'yyyy-mm-dd hh24:mi:ss')";
            }
        }else if(format == 3){
            if (DbUtil.isMysql()) {
                returnValue = "str_to_date("+val+",'%Y-%m')";
            } else if (DbUtil.isInformix()) {
                returnValue = "to_date("+val+", '%Y-%m')";
            } else if (DbUtil.isOracle()) {
                returnValue = "to_date("+val+",'yyyy-mm')";
            }
        }

        return returnValue;
    }


    public static String to_date(int format) {
        String returnValue = "";

        if (format == 1) {
            if (DbUtil.isMysql()) {
                returnValue = " str_to_date(?,'%Y-%m-%d') ";
            } else if (DbUtil.isInformix()) {
                returnValue = " to_date(?, '%Y-%m-%d') ";
            } else if (DbUtil.isOracle()) {
                returnValue = " to_date(?,'yyyy-mm-dd') ";
            }
        } else if (format == 2) {
            if (DbUtil.isMysql()) {
                returnValue = " str_to_date(?,'%Y-%m-%d %T') ";
            } else if (DbUtil.isInformix()) {
                returnValue = " to_date(?, '%Y-%m-%d %H:%M:%S') ";
            } else if (DbUtil.isOracle()) {
                returnValue = " to_date(?,'yyyy-mm-dd hh24:mi:ss') ";
            }
        }else if (format == 3) {
            if (DbUtil.isMysql()) {
                returnValue = " str_to_date(?,'%Y%m%d') ";
            } else if (DbUtil.isInformix()) {
                returnValue = " to_date(?, '%Y%m%d') ";
            } else if (DbUtil.isOracle()) {
                returnValue = " to_date(?,'yyyymmdd') ";
            }
        }

        return returnValue;
    }

    private static int getDatePatternType(String pattern){
        return pattern.split(" ").length ;
    }

    public static String date_pattern(String pattern) {
        if (DbUtil.isMysql()) {
            if (!pattern.startsWith("%"))
                return pattern;

            if (1 == getDatePatternType(pattern))
                return "%Y-%m-%d";

            return "%Y-%m-%d %T";

        } else if (DbUtil.isInformix()) {
            if (pattern.startsWith("%"))
                return pattern;

            if (1 == getDatePatternType(pattern))
                return "%Y-%m-%d";

            return "%Y-%m-%d %H:%M:%S";
        } else {
            if (!pattern.startsWith("%"))
                return pattern;

            if (1 == getDatePatternType(pattern))
                return "yyyy-mm-dd";

            return "yyyy-mm-dd hh24:mi:ss";
        }
    }

    /**
     *
     *1.MySQL采用地址方式处理主键,主键字段不用显示出来
     *2.Oracle采用字段显式方式字段与序列关联处理
     *
     * @param field 数据库字段
     * @return
     */
    public static String seqF(String field){
        if (DbUtil.isMysql())
            return "" ;
        else
            return field+"," ;
    }

    /**
     *
     *1.MySQL采用地址方式处理主键,主键字段不用显示出来
     *2.Oracle采用字段显式方式字段与序列关联处理
     *
     * @param val 数据库字段
     * @return
     */
    public static String seqV(String val){
        if (DbUtil.isMysql())
            return "" ;
        else
            return val+".nextval ," ;
    }


    public static String andRownum(String row) {
        String sql = "";
        // boolean isNumberic = DataUtil.isNumeric(row) ;
        if (DbUtil.isOracle()) {
            sql = " and rownum<=" + row;
        } else if (DbUtil.isMysql()) {
            sql = " limit " + row;
        }
        return sql;
    }

    public static String andEqRownum(String row) {
        String sql = "";
        // boolean isNumberic = DataUtil.isNumeric(row) ;
        if (DbUtil.isOracle()) {
            sql = " and rownum=" + row;
        } else if (DbUtil.isMysql()) {
            sql = " limit " + row;
        }
        return sql;
    }


    public static String month1stDate(){
        if (DbUtil.isOracle()) {
            return " TRUNC(SYSDATE, 'MM') " ;
        }else {
            return " DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) " ;
        }
    }

    public static String timeCmp(String f1 , String opt , String f2){
        if (DbUtil.isOracle()) {
            return f1+ opt + f2 ;
        }else{
            return "UNIX_TIMESTAMP("+f1+")"+ opt + "UNIX_TIMESTAMP("+f2+")";
        }
    }

    public static String timesub(String end_date, String start_date){
        if(DbUtil.isMysql()){
            return "timestampdiff(second,"+start_date+","+end_date+")";
        }else{
            return "ceil(("+end_date+"-"+start_date+") * 24 * 60 * 60)";
        }
    }


    /**
     * decode转换
     * @param field
     * @param cond1
     * @param v1
     * @param strings
     * @return
     */
    public static String decode(String field , String cond1 , String v1 , String...strings ){
        StringBuilder sql = new StringBuilder() ;
        if (DbUtil.isOracle()) {
            sql.append("decode(").append(field).append(",").append(cond1).append(",").append(v1) ;
            if(strings != null){
                for(int i= 0 ; i < strings.length ; i++){
                    sql.append(",").append(strings[i]) ;
                }
            }
            sql.append(")") ;
        }else {
            sql.append("if(").append(field) ;

            if(cond1.equalsIgnoreCase("null")){
                sql.append(" is null ").append(",").append(v1) ;
            }else{
                sql.append("=").append(cond1).append(",").append(v1) ;
            }
            if(strings != null){
                if(strings.length == 1){
                    sql.append(",").append(strings[0]) ;
                }else {
                    int ifNum = 0 ;
                    for(int i= 0 ; i < strings.length ; i++){
                        ifNum ++ ;
                        sql.append(",").append("if(").append(field) ;
                        cond1 = strings[i] ;
                        i++ ;
                        v1 = strings[i] ;
                        if(cond1.equalsIgnoreCase("null")){
                            sql.append(" is null ").append(",").append(v1) ;
                        }else{
                            sql.append("=").append(cond1).append(",").append(v1) ;
                        }
                        if(i == strings.length-1){
                            sql.append(",").append("null") ;
                        }else if(i+2 == strings.length-1){
                            i+=2 ;
                            sql.append(",").append(strings[i]) ;
                        }else if(i ==strings.length-2 ){
                            i++ ;
                            sql.append(",").append(strings[i]) ;
                        }
                    }
                    for(int i = 0 ; i<ifNum ; i++){
                        sql.append(")") ;
                    }
                }
            }

            sql.append(")") ;
        }
        return sql.toString() ;
    }

    public static String addDays(String val, int days) {
        String returnValue = null ;
        if (DbUtil.isOracle()) {
            returnValue = " "+ val+days;
        } else if (DbUtil.isMysql()) {
            returnValue = " DATE_ADD("+val+",INTERVAL "+(days)+" DAY) ";
        }
        
        return returnValue;
    }
    
    
    public static void main(String[] a ){
        System.out.println(to_char("@-1", 1));
    }

    /*替换nvl函数*/
    public static String nvl(){
        if (DbUtil.isOracle()){
           return "NVL";
        }
        if(DbUtil.isMysql()){
            return "IFNULL";
        }

        return null;
    }

    /*替换to_char函数*/
    public static String toChar(String val){
        if (DbUtil.isOracle()){
            return "to_char("+ val +")";
        }
        if(DbUtil.isMysql()){
            return "cast(" + val + " as char)";
        }

        return null;
    }

    /*替换listagg函数*/
    public static String listagg(String val1, String val2){
        if (DbUtil.isOracle()){
            return "listagg(" + val1 + ", ',') within group(order by " + val2 + ")";
        }
        if(DbUtil.isMysql()){
            return "group_concat(" + val1 + ", ',')";
        }

        return null;
    }

    /*替换cast函数*/
    public static String castTrans(String val){
        if (DbUtil.isOracle()){
            return "cast(" + val + " as NVARCHAR2(10))";
        }
        if(DbUtil.isMysql()){
            return "cast(" + val + " as char(10))";
        }

        return null;
    }

    /*begin end函数*/
    public static String beginEnd(int format){
        if (DbUtil.isOracle()){
            if(format == 1) {
                return "begin";
            }
            else if(format == 2) {
                return ";end;";
            }
        }
        if(DbUtil.isMysql()){
            return null;
        }
        return null;
    }

    public static String toNumber(String val){
        if (DbUtil.isOracle()){
            return "TO_NUMBER ("+ val +")";
        }
        if(DbUtil.isMysql()){
            return "cast("+ val + " AS DECIMAL (16))";
        }
        return null;
    }

    public static String toTrunc(int num,String val){
        if (DbUtil.isOracle()){
            return "TRUNC("+ num +"/"+ val +")";
        }
        if(DbUtil.isMysql()){
            return "FLOOR("+ num +"/"+ val +")";
        }
        return null;
    }
}

 

  *mapper.xml引用工具类方法例如:

<if test="endDateStr!=null and endDateStr!=''">
     and ${@com.ztesoft.contract.base.util.db.DBTUtil@to_char("t.create_Date",1)} <![CDATA[<=]]> #{endDateStr}
</if>
 
posted @ 2020-05-07 09:17  子渝渝渝  阅读(857)  评论(0编辑  收藏  举报