2011-10-16 444 views
2

我寫的......如何使用DESC或ASC對varchar數字列進行排序?

ORDER BY column ASC 

,但我的專欄是VARCHAR並排序,而不是1, 2, 10錯像1, 10, 2

我該怎麼做才能像1, 2, 10那樣排序?

+2

「它按錯」:其實這是*正確*分揀VARCHAR列。您需要將該值轉換爲數字類型。你使用什麼數據庫和版本? –

+0

你在列中有小數還是隻有整數? – gbn

+0

不,我有.xx小數 – Henrikh

回答

9
order by 
    cast(column as float) 

注:

  • 假設你只有在列中的數字。無 「魚」 或 「自行車」
  • 空字符串CAST零

編輯:對於MySQL。 You can not cast to float

order by 
    cast(column as decimal(38,10)) 
+0

這不顯示任何東西... – Henrikh

+0

順便說一句:我知道FLOAT工作最多7個字符...就像999.99,但可以有更多 – Henrikh

+0

@Daniel:你是什麼意思?當然它提供了一些東西。你知道你需要SELECT等在ORDER BY前面嗎? – gbn

3

您可以強制轉換爲int ...

order by cast(column as int) 

DEMO

DECLARE @q as table(
name varchar(50), 
columnn varchar(10) 

) 
insert into @q 
VALUES('one','1'),('one','10'),('one','20'),('one','3'),('one','2'),('one','20') 


select * from @q order by cast (columnn as int) desc 

打印

-------------------------------------------------- ---------- 
one            20 
one            20 
one            10 
one            3 
one            2 
one            1 

所以,丹尼爾,是的,它的工作原理:)

UPDATE

order by cast(column as decimal(20,6)) 

定投列值,以十進制數最多20位數字和小數點後6位。根據您的實際要求進行調整。

+0

啊,打我吧。 :) – 2011-10-16 17:53:53

+0

我看到你的答案出現和消失嘿嘿;) – Icarus

+0

如果你的意思,例如...「按順序鑄(列爲int)DESC」,對不起,它不起作用 – Henrikh

1

我用這種方式 與一個查詢是相乘:

ORDER BY列名* 1個ASC

實施例:表用戶具有與列值[varchar(20)]值。 然後你就可以查詢它:

SELECT * FROM用戶的ORDER BY值* 1

後,我們乘它MySQL的將它視爲一個號碼,但不建議重這樣加載。

-1

試試這個:

order by CAST(column as UNSIGNED) 
1

試試這個。

SELECT * FROM table_name ORDER BY CAST(field_name as SIGNED INTEGER) ASC

+0

我正在使用mySql,只有這個建議工作在我的情況'''SELECT v.value AS id FROM'customer_entity_varchar' v INNER JOIN customer_entity e ON v.entity_id = e.entity_id WHERE v.attribute_id = 315 AND v.entity_type_id = 1 AND e.'website_id' = 1 ORDER BY CAST(v.value as SIGNED INTEGER)DESC LIMIT 1''' –

相關問題