2012-05-17 20 views
11

'da çalışmıyor Float olarak döküm edilen bir varchar sütununu sıralamanın bir yolunu bulamıyorum.Bir VARCHAR sütununu CAST işlecini kullanarak FLOAT olarak sıralama MySQL

SELECT guid, number FROM table ORDER BY 'CAST(number AS FLOAT) DESC' 

"sayı" sütunu böyle tanımlanır:: İşte benim SQL talebidir

number varchar(20) ascii_general_ci 

Ve test için bu sütunda tanımlanan değerler şunlardır:

0.00 
200.00 
20.00 
100.00 

MySQL CAST işlecini tamamen yok sayın ve sütunları kılavuza göre sıralayın ...

MySQL'de bir hata var mı o yanlış bir şey mi?

+0

^^ ORDER BY 'CAST (sayı AS FLOAT) DESC', 'ORDER BY' foo'' veya 'ORDER BY' ehrlkherklth ektl k'' ile aynı sonuçları verir. İfadenizde 'SİPARİŞ BY' mantıklı değil ...... – arnoudhgz

cevap

32

bunu dene (sayı olarak dizeleri sıralamak için yardımcı olur) -

SELECT guid, number FROM table ORDER BY number * 1 DESC 

Bu sayıya dize döküm MySQL yardımcı olacaktır.


Başka bir çözüm - GUıD'I almış ise

...CAST(value as DECIMAL(10,5)) 
+0

Çalışıyor! Hala CAST operatörünün neden çalışmadığını anlamıyorum, ancak numaranız problemimi çözüyor. –

+2

FLOAT'a yayınlayamazsınız. CAST işlev referansına bakın, FLOAT türü yok. – Devart

+1

Woooh, çok haklısınız, eğer yaparsam: REHBERİ SEÇ, REFERANS NOKTASI SİPARİŞ FORMU (SİFİRLİK OLARAK numara) DESC tırnak işaretleri olmadan, işe yarıyor! Ben SIGNED denedim ama tırnak işaretleri olmadan. Çok teşekkürler –

0

sonra boyut Bunun varchar(40) Insted olmalıdır kullanabileceğiniz uuid()

Ben

select uuid(), number order by 'cast(number as float) desc'; 
kullanılarak yapmış

Çok çalışıyor. Eğer bu değilse, tüm kodunuzu gönderebilir misiniz?

+0

sadece sabit bir dizeyle sipariş veriyorsunuz –

İlgili konular