2012-05-17 18 views
11

Tôi không thể tìm thấy một cách để sắp xếp một cột VARCHAR được đúc như là float. Đây là yêu cầu của tôi SQL:Sắp xếp một cột VARCHAR như FLOAT bằng cách sử dụng toán tử CAST không hoạt động trong MySQL

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

Các "number" cột được định nghĩa như thế này:

number varchar(20) ascii_general_ci 

Và các giá trị quy định tại cột này cho thử nghiệm của tôi là:

0.00 
200.00 
20.00 
100.00 

MySQL hoàn toàn bỏ qua toán tử CAST và sắp xếp các cột theo guid ...

Có lỗi trong MySQL hay không o cái gì sai?

+0

^^ 'ORDER BY 'CAST (số AS FLOAT) DESC'' kết quả giống như' ORDER BY' foo'' hoặc 'ORDER BY 'ehrlkherklth ektl k''. 'ORDER BY' trong câu lệnh của bạn không có ý nghĩa ...... – arnoudhgz

Trả lời

32

Hãy thử thủ thuật này (giúp sắp xếp chuỗi như số) -

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

Nó sẽ giúp MySQL để cast chuỗi số.


Một giải pháp -

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

Nó hoạt động !!! Vẫn không hiểu tại sao toán tử CAST không hoạt động nhưng mẹo của bạn giải quyết được vấn đề của tôi. –

+2

Bạn không thể truyền tới FLOAT. Có một cái nhìn tại tham chiếu hàm CAST, không có loại FLOAT. – Devart

+1

Woooh, bạn đúng vậy, nếu tôi làm: SELECT guid, số FROM bảng ORDER BY CAST (số AS KÝ) DESC mà không có dấu ngoặc kép, nó hoạt động! Tôi đã thử SIGNED nhưng không có dấu ngoặc kép. Cảm ơn rất nhiều –

0

Nếu bạn đã thực hiện GUID sau đó kích thước nên được varchar(40) insted của mà bạn có thể sử dụng uuid()

Tôi đã làm nó bằng cách sử

select uuid(), number order by 'cast(number as float) desc'; 

Nó hoạt động tốt. Nếu đây không phải là bạn muốn bạn có thể gửi toàn bộ mã của bạn?

+0

bạn chỉ đang đặt hàng bằng một chuỗi cố định –

Các vấn đề liên quan