2013-05-17 21 views
6

Xin lỗi về sai lầm của tôi, tôi sẽ cung cấp các mẫu thực sự cho câu hỏi, ID của tôi bao gồm ký tự bên:trật tự bởi 1.99.10 và 1.99.9 máy chủ sql

mẫu mã:

select ID from student order by ID 

Expected output from mine   but system output 
-------------------------   ----------------- 
JAD.1.99.9        JAD.1.99.10 
JAD.1.99.10       JAD.1.99.9 

và này ID là loại nvarchar.

+2

Đầu ra hệ thống là hành vi mong đợi bình thường khi sắp xếp theo giá trị văn bản. Chúng không phải là số. Ký tự "1" đứng trước ký tự "9". – Tim

+0

Theo liên kết này có thể bạn sẽ nhận được một số ý tưởng..http: //stackoverflow.com/questions/119730/how-do-i-sort-a-varchar-column-in-sql-server-that-contains-numbers – Pank

+0

bản sao có thể có của [Làm cách nào tôi có thể sắp xếp cột 'Số phiên bản' một cách chủ động bằng truy vấn SQL Server] (http://stackoverflow.com/questions/3474870/how-can-i-sort-a-version-number-column -generically-using-a-sql-server-query) – Pondlife

Trả lời

14

Yesterday đã có một câu hỏi tương tự mà tôi đã học được rằng bạn có thể sử dụng hierarchyid cho phiên bản sắp xếp (nếu bạn sử dụng ít nhất SQL Server 2008):

SELECT id 
FROM student 
ORDER BY Cast('/' + Replace(id, '.', '/') + '/' AS HIERARCHYID) 

DEMO

+0

Giải pháp đúng !! –

+2

Đó là một thủ thuật tiện lợi! –

+0

cảm ơn vì đã chỉ ra sai lầm của tôi ... trong câu trả lời của tôi ..... –

-2

Bạn cần phải đặt hàng bởi chuỗi con của phần sau bất kỳ dấu chấm nào. Đây sẽ là một truy vấn SQL cụ thể DB và vì bạn không đề cập đến cái nào bạn đang sử dụng, tôi không thể đưa ra một ví dụ SQL chi tiết.

Đây là cách bạn có thể bỏ một số thập phân giá trị

http://www.w3resource.com/sql/aggregate-functions/avg-decimal-places-using-cast-within-avg.php

Câu trả lời từ Tim là tốt nhất ..

Nhưng tôi đang đưa ra thêm một giải pháp cho các giá trị varchar trật tự -

SELECT id 
FROM student 
ORDER BY ID desc 
+2

Điều đó sẽ không trả lại những gì user2098512 muốn –

+0

Bạn không thể đảo ngược thứ tự chỉ vì kết quả của OP được đặt hàng sai. Bây giờ bạn luôn phân loại giảm dần ngay cả khi id sẽ là '1.99.8' và' 1.99.9'. Đây cũng không phải là loại phiên bản. Chỉ cần kiểm tra nó bằng '1.1.1' và' 2.1' bắt đầu bằng '2.1'. –

+2

Truy vấn này là hoàn hảo để đặt hàng trong loại vARCHAR .... cột – Pank

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