溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

datax-web ExecutorJobHandler如何修改源碼解決sqlserver時間格式不識別時間字符串中的%

發(fā)布時間:2021-12-06 16:32:32 來源:億速云 閱讀:348 作者:柒染 欄目:大數據

今天就跟大家聊聊有關datax-web ExecutorJobHandler如何修改源碼解決sqlserver時間格式不識別時間字符串中的%,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

問題:

select * from dbo.SKJJGWFGXX where (i_time >= '1980-01-01%00:00:00' and i_time < '2020-12-15%15:25:40') 具體錯誤信息為:com.microsoft.sqlserver.jdbc.SQLServerException: 從字符串轉換日期和/或時間時,轉換失敗。

時間字符串中帶%,mysql數據庫能識別并正確執(zhí)行,而sqlserver數據庫(2008)不能識別,造成查詢失敗。

如果此問題不解決,那么從sqlserver到mysql的數據同步中,無法采用時間增量方式進行數據實時同步。

在java中和python中都嘗試把“%”換成空格,最后的結果都是無法運行。估計是在命令行中做為參數傳入時,空格本身是特殊符號,用于分開命令和參數的,強行替換,最后導致時間字符串被分成兩段接收。

解決方案:

修改ExecutorJobHandler,生成job臨時文件時,把臨時文件中的變量用具體值進行替換。

datax-web ExecutorJobHandler如何修改源碼解決sqlserver時間格式不識別時間字符串中的%

定義了一個新的處理方法:replaceJobJsonParams

datax-web ExecutorJobHandler如何修改源碼解決sqlserver時間格式不識別時間字符串中的%

// zhuangxl 2020.12.15 替換開始

String jobJson = new String(trigger.getJobJson());

jobJson = replaceJobJsonParams(jobJson, trigger);

tmpFilePath = generateTemJsonFile(jobJson);

// zhuangxl 2020.12.15 替換結束

/**

 * 替換job文件參數

 * @author zhuangxl

 * @param jobJson

 * @return

 */

private String replaceJobJsonParams(String jobJson, TriggerParam trigger) {

    if (IncrementTypeEnum.TIME.getCode() == trigger.getIncrementType()) {

        String replaceParamType = trigger.getReplaceParamType();

        //類別:時間自增,只操作指定了具體的時間格式的類型

        if (StringUtils.isNotBlank(replaceParamType) && !replaceParamType.equals("Timestamp")) {

            //格式化時間字符串

            SimpleDateFormat sdf = new SimpleDateFormat(replaceParamType);

            String endTime_ = sdf.format(trigger.getTriggerTime());

            String startTime_ = sdf.format(trigger.getStartTime());

            //識別要替換的時間變量名稱

            String[] replaceParams = trigger.getReplaceParam().split(" ");

            String startTimeStr = replaceParams[0].substring(replaceParams[0].indexOf("D")+1, replaceParams[0].indexOf("="));

            String endTimeStr = replaceParams[1].substring(replaceParams[1].indexOf("D")+1, replaceParams[1].indexOf("="));

            //執(zhí)行變量替換

            jobJson = jobJson.replace("${"+startTimeStr+"}", "'"+startTime_+"'");

            jobJson = jobJson.replace("${"+endTimeStr+"}", "'"+endTime_+"'");

        }

    }

    return jobJson;

}

看完上述內容,你們對datax-web ExecutorJobHandler如何修改源碼解決sqlserver時間格式不識別時間字符串中的%有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI