2017-06-06 1 views
0

Ich versuche, eine Woche Spalte mit dem Datentyp varchar zu sortieren, da die Wochen in diesem Format 2017_6, 2017_7 sind. Wie wir alle SQL-Arten varchar Zahlen wie 2017_1, 2017_10, 2017_11 usw. wissenSortierung in SQL Server

Wie kann ich es erhalten, um numerisch zu sortieren, ohne das Wochenformat zu ändern? Ich versuchte nvarchar, aber das hat nicht funktioniert.

Antwort

4

Ein einfacher Weg ist, um die Länge zu verwenden:

order by len(weekcol), weekcol 

Für mehrere Jahre:

order by left(weekcol, 4), len(weekcol), weekcol 
+0

Nizza kleiner Trick. Einige Erklärungen, warum das funktioniert, werden dem OP helfen;) – TomTom

+0

Order by len funktioniert aber ich habe noch Wochen ab 2016, die vor der Woche 2017_1 erscheinen müssen. –

0

Sie können auch sortieren nach dieser Feldlänge. zB:

SELECT ........ order by len(myfield),myfield 
0

Trick mit PARSENAME, das wird mit jedem Jahr Bereich arbeiten:

ORDER BY CAST(PARSENAME(Replace(ColumnName, '_', '.'), 2) AS INT), 
     CAST(PARSENAME(Replace(ColumnName, '_', '.'), 1) AS INT); 

Proben Ausführung mit Beispieldaten:

DECLARE @TestTable TABLE (MonthValue VARCHAR (10)); 

INSERT INTO @TestTable (MonthValue) VALUES 
('2017_6'), ('2017_7'), ('2016_12'), ('2017_10'), ('2017_11'); 

SELECT * 
FROM @TestTable 
ORDER BY CAST(PARSENAME(Replace(MonthValue, '_', '.'), 2) AS INT), 
     CAST(PARSENAME(Replace(MonthValue, '_', '.'), 1) AS INT) 

Ergebnis:

2016_12 
2017_6 
2017_7 
2017_10 
2017_11 
Verwandte Themen