Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Złożone sortowanie pola string - liczba - string

To rozwiązanie jest bardziej niezawodne niż wybrana odpowiedź. Ta odpowiedź może nie dać oczekiwanej odpowiedzi, jeśli na stacji jest więcej niż 1 numer, taki jak „EPA WELL 5 7”. To rozwiązanie polega na dopełnieniu liczby zerami, aby porównanie uwzględniało wszystkie liczby 8-cyfrowe.

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

*Odpowiedź GoatCD nie da poprawnej kolejności w moich danych testowych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zachować jedno wystąpienie połączenia SQL Server otwarte dla wielu żądań w C#?

  2. Jak usunąć wszystkie domyślne ograniczenia w bazie danych SQL Server — samouczek SQL Server / TSQL, część 94?

  3. Jak uzyskać ostatni rekord na grupę w SQL?

  4. W SQL Server, jak mogę zablokować pojedynczy wiersz w sposób podobny do Oracle SELECT FOR UPDATE WAIT?

  5. Zautomatyzuj przywracanie testowe bazy danych w SQL Server