Mysql字符串中有数字的排序问题

Mysql字符串中有数字的排序问题,第1张

你的“中文”是固定的文字吗?

--下面的语句只支持9999以下的数字排序

select id,col, right(col,length(col)-LEAST(

    if(Locate('0',col) >0,Locate('0',col),9999),

    if(Locate('1',col) >0,Locate('1',col),9999),

    if(Locate('2',col) >0,Locate('2',col),9999),

    if(Locate('3',col) >0,Locate('3',col),9999),

    if(Locate('4',col) >0,Locate('4',col),9999),

    if(Locate('5',col) >0,Locate('5',col),9999),

    if(Locate('6',col) >0,Locate('6',col),9999),

    if(Locate('7',col) >0,Locate('7',col),9999),

    if(Locate('8',col) >0,Locate('8',col),9999),

    if(Locate('9',col) >0,Locate('9',col),9999)

  )-1) *1 a

   from test4 order by a

如果排序的字段属于字符型的那么就会出现题主提问中的情况,因为数据库引擎是按照对字符串的排序规则实施排序的(从字符串左边第一个字符开始往后逐位比较的,例如“1”<"10,"10"<"2",“10"<"3",..."10"<"9"等)。

解办法,可以将该排序字段的数据类型改为数字,如果无法改为数字的话,则可以将字符类型转换为数字类型进行排序。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7125209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存