MySQL将varchar字段转为数字类型并排序或比较

设计数据库之初设计了排序号,业务要求按照这个进行排序,但是粗心设置成了varchar类型,今天在写代码的时候发现了这个问题,在网上找了找相关博文,有一位大佬的让我印象颇深,在此放出那位大佬的博客 ==>> 戳我跳转

排序

  1. 在字段后加个0
<select id="selectGSuppliergroupList" parameterType="GSuppliergroup" resultMap="GSuppliergroupResult">
        <include refid="selectGSuppliergroupVo"/>
        <where>  
            <if test="gGroupname != null  and gGroupname != ''"> and g_groupname like concat('%', #{gGroupname}, '%')</if>
            <if test="gGroupcode != null  and gGroupcode != ''"> and g_groupcode = #{gGroupcode}</if>
            and g_dr='0'
        </where>
        order by g_ordernum+0 asc
        <!--g_ordernum字段后+0是为了将g_ordernum字段转为数字类型,方便排序-->
    </select>

如上图所示,g_ordernum字段就是排序号字段,在后面+0就可以实现转化类型,但是要保证的一点是这个里边必须存的都是数字,不然是会报错的。
2. ORDER BY CAST(g_ordernum AS SIGNED);
3. ORDER BY CONVERT(g_ordernum ,SIGNED);

比大小

例:

SELECT ‘123’+0; – 结果为123

SELECT ‘123’+0>127; – 结果为0

SELECT ‘123’+0>12; – 结果为1

SELECT CAST(‘123’ AS SIGNED); – 结果为123

SELECT CONVERT(‘123’,SIGNED)>127; – 结果为0

SELECT CONVERT(‘123’,SIGNED)>12; – 结果为1

SELECT CAST(‘123’ AS SIGNED); – 结果为123

SELECT CAST(‘123’ AS SIGNED)>127; – 结果为0

SELECT CAST(‘123’ AS SIGNED)>12; – 结果为1

综合例子:

SELECT ‘123’+0>12 ORDER BY CONVERT(‘123’,SIGNED); – 结果为1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值