MyBatis--------解决Oracle的to_number函数不支持有字母的情况

需求:某表的某列是varchar类型,此列里存放的不全是数字,如何使用to_number函数呢?

解决:使用translate函数

        SELECT ${primaryKey} FROM ${sourceTable}
        WHERE
        1=1
        -- 匹配全数字类型
        AND regexp_like(${sourceField}, '(^[0-9]+.[0-9]+$)|(^[0-9]$)')
        <if test=" minValue!= null">
            <![CDATA[
               -- 将数字保留,其他的大写字母移除
        	    AND TO_NUMBER(translate(${sourceField},
        	                         '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')) 
        	            >= #{minValue}
             ]]>
        </if>
        <if test=" maxValue!= null">
            <![CDATA[
                -- 将数字保留,其他的大写字母移除
                AND TO_NUMBER(translate(${sourceField},
                                     '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')) 
                       <= #{maxValue}
            ]]
        </if>

参考 Oracle中的translate使用

posted @ 2022-07-17 12:13  小大宇  阅读(6)  评论(0编辑  收藏  举报