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