国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

JSqlParser-MySQL Convert(expr,type) 函數(shù)的問題

DDD
發(fā)布: 2024-12-10 12:42:10
轉(zhuǎn)載
1147人瀏覽過

jsqlparser-mysql convert(expr,type) 函數(shù)的問題

我們最近將基礎(chǔ)框架升級到了 springboot 3.3.5 和其他相關(guān)庫。

測試期間向我報(bào)告了一個(gè)錯(cuò)誤。使用 jsqlparser 5.0 時(shí)某些查詢會失敗。

這是一個(gè)簡單的演示:

public class test {
  public static void main(string[] args) throws jsqlparserexception {
    string sql =
        "select  convert(if(bill_type = 2, id, ''), char) from dual";
    statement statement2 = ccjsqlparserutil.parse(sql);
    system.out.println(statement2.tostring());
  }
}
登錄后復(fù)制

問題在于 jsqlparser 5.0 不支持 mysql 風(fēng)格的 convert 語法 convert(expr, type)。它僅支持:

sql server 風(fēng)格:convert(type, expr)
字符集轉(zhuǎn)換:convert(expr using charset)
這會影響使用 mysql 的 convert 函數(shù)的查詢,尤其是當(dāng)表達(dá)式很復(fù)雜時(shí)(例如使用 if 語句)。

jsqlparser 中的當(dāng)前語法:

{
    <k_convert> "("
    (
        lookahead(coldatatype() ",") (
            coldatatype = coldatatype()
            "," expression = expression()
            [ "," style = <s_long> ]
        )
        |
        (
            expression = expression()
            <k_using> transcodingname=identifierchain()
        )
    )
    ")"
}
登錄后復(fù)制

這個(gè)問題有兩種解決方案:

  1. 使用 cast 而不是 convert
    只需將 convert(expr, type) 替換為 cast(expr as type) 即可。如果您使用 mysql

  2. ,這是最簡單的解決方案
  3. 修改 jsqlparser 語法以支持 convert(expr, type)
    需要修改語法規(guī)則以支持mysql語法。但是,請小心 transcodingfunction.appendto 方法。當(dāng)前實(shí)現(xiàn)生成 convert(type, expr),這在 sql server 中是合法的,但在 mysql 中是非法的

    public StringBuilder appendTo(StringBuilder builder) {
        if (isTranscodeStyle) {
            return builder
                    .append("CONVERT( ")
                    .append(expression)
                    .append(" USING ")
                    .append(transcodingName)
                    .append(" )");
        } else {
            return builder
                    .append("CONVERT( ")
                    .append(colDataType)
                    .append(", ")
                    .append(expression)
                    .append(transcodingName != null && !transcodingName.isEmpty()
                            ? ", " + transcodingName
                            : "")
                    .append(" )");
        }
    }
登錄后復(fù)制

以上就是JSqlParser-MySQL Convert(expr,type) 函數(shù)的問題的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
相關(guān)標(biāo)簽:
來源:dev.to網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號