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

Sortuj ciągi liczbowe SQL po podziale

Wykonuj funkcje ciągów w swoim ORDER BY usunąć tylko numer. Coś takiego powinno działać:

SELECT col
FROM table
ORDER BY CAST(CASE WHEN ISNUMERIC(SUBSTRING(col,4,20)) = 1
              THEN SUBSTRING(col,4,20)
              ELSE LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1)
         END AS NUMERIC)

To najpierw usunie IS- i sprawdź, czy reszta ciągu jest liczbą. Jeśli tak, pozostawi cyfry dziesiętne, w przeciwnym razie usunie . oraz następujące znaki alfanumeryczne.

Zakładamy, że zamierzona kolejność w przypadku liczbowych miejsc po przecinku będzie wyglądać następująco:

IS-123.A
IS-123.1
IS-123.2

Jeśli nie obchodzi Cię, co jest po przecinku/kropce, po prostu:

ORDER BY CAST(LEFT(SUBSTRING(col,4,20),CHARINDEX('.',SUBSTRING(col,4,20),0)-1) AS NUMERIC)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z uprawnieniami programu SQL Server 2008 OPENROWSET

  2. Szyfrowanie tabel bazy danych w SQL Server 2008

  3. SQLServer - Jak znaleźć tabele zależne na mojej tabeli?

  4. Spłaszcz/scal nakładające się przedziały czasu

  5. Uciekanie znaków specjalnych w instrukcji SQL LIKE przy użyciu parametrów sql