mysql排序字符串编号

sre*_*avc 30 mysql

我有一个varchar类型的列,它存储了许多不同的数字.比如说有3行:17.95,199.95和139.95.如何将该字段排序为mysql中的数字

Ric*_*iwi 120

最快,最简单?使用* 1

select *
from tbl
order by number_as_char * 1
Run Code Online (Sandbox Code Playgroud)

使用的其他原因* 1是它可以

  1. 在下溢中存在一些可怕的意外(在选择要投射的内容时减少小数精度)
  2. 工作(并忽略)纯粹非数字数据的列
  3. 剥离字母数字数据的数字部分,例如123A,124A,125A

  • @Devart - 编辑。它比任何显式转换都要快。快速 (1) 编写 - 绝对 (2) 执行 - 很可能 (3) 额外奖励.. 无价 (2认同)

Dev*_*art 14

使用CAST或CONVERT函数.

  • 请参见手册 - DECIMAL数据类型,DECIMAL [(M [,D])].试试这样的东西--DECIMAL(10,5). (3认同)

Mar*_*cks 12

如果需要对包含文本和数字的char列进行排序,则可以执行此操作.

tbl包含:2,10,a,c,d,b,4,3

select * from tbl order by number_as_char * 1 asc, number_as_char asc
Run Code Online (Sandbox Code Playgroud)

预期产量:2,3,4,10,a,b,c,d

如果不按参数添加第二个顺序,则只会对数字进行排序 - 实际上会忽略文本.


Zon*_*Zon 8

这种方法在将文本排序为数字时很有用:

SELECT `my_field` 
FROM `my_table` 
ORDER BY `my_field` + 0;
Run Code Online (Sandbox Code Playgroud)

http://crodrigues.com/trick-mysql-order-string-as-number/上找到了解决方案。


小智 6

用前导零填充字符串:

ORDER BY LPAD(`column`,<max length of string>,"0")
Run Code Online (Sandbox Code Playgroud)