按字母数字顺序对MySQL列进行排序

时间:2011-02-03 13:19:04

标签: sql mysql

如何按AlphaNumeric顺序排序MySQL;

假设我有一个包含这样数据的表。

Name   +   ID
AA     |   10
AE     |   2
AD     |   1

当我对列ID进行排序时,结果为

1 
10
2

但是当我在select id语句中为列id

添加+ 0时
SELECT * FROM tableName ORDER BY columnName + 0;

1
2
10

但是列名称的结果是这个

AA
AE
AD

我已经参考过此链接,但它对我不起作用。 Alphanumeric Order By in Mysql

注意:所有列类型都是varchar,我无法预测将插入哪些数据。 我知道我的问题很简单,但我仍然无法得到我想要的结果。 此外,我不能使用Java来对结果进行排序,因为我在其上使用LIMIT。 我会感激任何帮助。谢谢

附加信息:(根据名称和ID进行排序的样本表) header1是设置为另一个表的名称,与header2 w / c相同的是ID

CREATE TABLE IF NOT EXISTS `sort` (
  `header1` varchar(200) DEFAULT NULL,
  `header2` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `sort` (`header1`, `header2`) VALUES
('AA', '10'),
('AE', '2'),
('AD', '1'),
('AD', '1'),
('AF', 'a'),
('AF', 'a1'),
('1', 'a1');

2 个答案:

答案 0 :(得分:1)

将字段的数据类型更改为数字数据类型而不是字符类型。

正零必须起作用,因为它正在将数据转换为数字。

答案 1 :(得分:0)

  

它似乎没有排序,因为它显示了我插入数据的顺序。

现在很清楚了!问题是你误解表是如何工作的。 表没有明确的订单。就是这样。无论何时在没有ORDER BY的情况下执行SELECT,DB都可以按照自己喜欢的顺序自由返回列。你无能为力。

通常,行按照主键确定的顺序返回。如果没有,则使用插入顺序,除非有删除。删除后,数据库会将新记录放在某处以填补空白。但是,这不是保证的行为,当您切换到另一个版本或其他任何版本时,它可能会改变。

永远不要依赖表格中的行顺序。如果订单很重要,请始终使用ORDER BY或包含ORDER BY的VIEW。