如果在mysql中包含数字和文本,如何按字段排序

时间:2014-11-03 06:06:30

标签: mysql

我有地址数据。我想将地址字段命令为asc和desc命令。
你可以在表中看到有2个字段id,地址
如果我订购地址字段desc.It应该是以下订单来 (1)5621 EMERSON CT
(2)5600 Emerson Court
(3)5393 Conestoga博士 但你可以在图像中看到。它工作不正常。地址字段是varchar(255)。 任何人都可以告诉我,我应该怎么做才不解决这个问题? 任何帮助将不胜感激。

enter image description here

2 个答案:

答案 0 :(得分:3)

SELECT * FROM `address` ORDER BY cast(`address` AS SIGNED) ASC

在上面的脚本中,键入地址列为int。因此,如果您的列具有类似值,则表示1234 street。 Mysql将其解析为字符,因此我们强制mysql使用数据类型为signed int的数据类型转换函数cast将其解析为int。所以现在mysql将其视为1234而不是1234 street

但是如果address列具有这样的值,则意味着junk 1234现在mysql通过识别该值以非数字字符开头将其解释为0。因此,如果从数字开始,它可以工作,但不适用于其他。

答案 1 :(得分:2)

由于这个“地址”是一个字符串(varchar字段),因此它会被词汇排序。所以,您可以通过

订购
SELECT `address` FROM 'table` ORDER BY convert(`address`, decimal) DESC;

这将解决问题。