簡體   English   中英

按字母數字順序對MySQL列進行排序

[英]Sort MySQL column in alphanumeric order

我如何按字母數字順序排序到MySQL;

假設我有一個包含這樣數據的表。

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

當我對列ID進行排序時,結果是

1 
10
2

但是當我在這樣的select語句中為列ID添加+ 0時

SELECT * FROM tableName ORDER BY columnName + 0;

1
2
10

但是“名稱”列的結果是這樣

AA
AE
AD

我已經提到了此鏈接,但對我來說不起作用。 Mysql中的字母數字順序

注意:所有列類型均為varchar,我無法預測將插入哪些數據。 我知道我的問題很簡單,但仍然無法獲得想要的結果。 另外,我無法使用Java對結果進行排序,因為我在其上使用了LIMIT。 我將不勝感激。謝謝

附加信息:(要根據名稱和ID排序的樣本表)header1是設置到另一個表的Name,與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');

將字段的數據類型更改為數字數據類型,而不是字符類型。

加零必須有效,因為它將數據轉換為數字。

似乎沒有排序,因為它顯示了我插入數據的順序。

現在很清楚! 問題是您誤解了表的工作方式。 表格沒有定義的順序。 而已。 每當執行不帶ORDER BY的SELECT時,DB都可以按其喜歡的任何順序返回列。 而且您對此無能為力。

通常,以主鍵確定的順序返回行。 如果沒有,插入順序將被使用,除非有刪除。 刪除后,數據庫會將新記錄放在某處以填補空白。 但是,這不是保證的行為,當您切換到另一個版本或任何其他版本時,它可能會更改。

永遠不要依賴表中行的順序。 如果訂單很重要,請始終使用ORDER BY或包含ORDER BY的VIEW。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM