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

Sắp xếp phức tạp của chuỗi trường - số - chuỗi

Giải pháp này đáng tin cậy hơn câu trả lời đã chọn. Câu trả lời này có thể không đưa ra câu trả lời mong đợi nếu có nhiều hơn 1 số như 'EPA WELL 5 7' trong trạm. Giải pháp này là đệm số với '0 để so sánh sẽ xem xét tất cả các số có 8 chữ số.

DECLARE  @Table1 table([station] varchar(26))

INSERT INTO @Table1
    ([station])
VALUES
    ('ANTIL WELL 2'),
    ('ANTIL WELL 1'),
    ('BASELINE & CALIFORNIA WELL'),
    ('EPA WELL 7'),
    ('EPA WELL 6'),
    ('EPA WELL 108'),
    ('EPA WELL 109'),
    ('EPA WELL 110'),
    ('EPA WELL 111'),
    ('EPA WELL 112'),
    ('EPA WELL 108S'),
    ('EPA WELL 111108')
;

SELECT station
FROM @table1
ORDER BY 
CASE WHEN station not like '%[0-9]%' THEN station ELSE
   STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0', 
   PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
END

* Câu trả lời của GoatCD sẽ không đưa ra thứ tự chính xác trong dữ liệu thử nghiệm của tôi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP sqlsrv_connect tới SQL Server:Đã xảy ra lỗi liên quan đến mạng hoặc trường hợp cụ thể khi thiết lập kết nối với SQL Server

  2. Cách chuyển đổi dữ liệu từ các hàng dựa trên một cột cụ thể sang một cấu trúc dữ liệu khác

  3. Điều kiện có điều kiện trong SQL Server

  4. Loại toán hạng đụng độ:int không tương thích với ngày + Câu lệnh INSERT xung đột với ràng buộc FOREIGN KEY

  5. Tại sao truy vấn này chậm lần đầu tiên sau khi tôi bắt đầu dịch vụ?