SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Cách đặt hàng theo tên tháng trong SQLite

Vấn đề:

Bạn muốn sắp xếp các hàng theo số tháng, tên tháng nhất định (bạn muốn tháng 1 được hiển thị trước, tháng 12 cuối cùng).

Ví dụ:

birthday bảng chứa hai cột:tên và birthday_month . Các tháng được viết bằng tên, không phải bằng số.

name birthday_month
Ronan Tisha tháng 1
Tháng 12 tháng 4
Angie Julia tháng 4
Narelle Dillan tháng 4
Purdie Casey tháng 1
Donna Nell KHÔNG ĐẦY ĐỦ
Blaze Graeme Tháng 10

Bạn muốn sắp xếp các hàng theo birthday_month .

Giải pháp:

SELECT *
FROM birthday
ORDER BY
 (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END);

Kết quả trông như thế này (các hàng được sắp xếp theo thứ tự tăng dần theo birthday_month ):

name birthday_month
Purdie Casey tháng 1
Angie Julia tháng 4
Narelle Dillan tháng 4
Blaze Graeme Tháng 10
Ronan Tisha tháng 1
Tháng 12 KHÔNG ĐẦY ĐỦ
Donna Nell KHÔNG ĐẦY ĐỦ

Thảo luận:

Để sắp xếp các hàng theo tháng, bạn cần các tháng bằng số (không phải tên). Bạn có thể chuyển đổi tên tháng thành tháng số bằng cách sử dụng CASE WHEN mệnh đề. Sau CASE từ khóa, chỉ định tên của cột. Sau đó, sau mỗi WHEN , nêu giá trị trong cột này, sử dụng THEN từ khóa và chỉ định giá trị mới bạn muốn chỉ định thay vì giá trị cũ. Ở đây, cột là birthday_month , các giá trị hiện tại trong cột này là 'January ',' February ',…,' December ', và các giá trị mới là số tháng 1 , 2, …, 12 . Sau khi bạn hoàn tất việc chuyển đổi tất cả các giá trị, hãy nhớ sử dụng END từ khóa để đóng CASE WHEN mệnh đề. Hãy xem:

CASE birthday_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

Đây là cách bạn chuyển đổi tên tháng thành số tháng. Bạn có thể sử dụng nó để sắp xếp các hàng theo thứ tự tăng dần theo tháng - chỉ cần sử dụng nó trong ORDER BY mệnh đề.

Lưu ý rằng trong SQLite, NULL s được hiển thị đầu tiên khi sắp xếp theo thứ tự tăng dần và cuối cùng khi sắp xếp theo thứ tự giảm dần. Ngoài ra, các hàng có cùng birthday_month được hiển thị theo thứ tự ngẫu nhiên (bạn có thể thấy Angie Julia thứ hai và Narelle Dillan thứ ba, hoặc Narelle Dillan thứ hai và Angie Julia ngày thứ ba). Để thay đổi thứ tự giảm dần, hãy sử dụng DESC từ khóa sau cột trong ORDER BY mệnh đề. Đây là giao diện của truy vấn:

SELECT *
FROM birthday
ORDER BY
  (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) DESC;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để Cache JSON được phân tích cú pháp để sử dụng Ngoại tuyến

  2. SQLite SUBSTRING () Giải thích

  3. Null Pointer Exception khi gọi getReadableDatabase ()

  4. Chỉ nâng cấp hàng khi nâng cấp ứng dụng

  5. Id tài nguyên có thay đổi mỗi khi ứng dụng khởi động không