2017-06-06 5 views
0

データ型がvarcharの週の列を並べ替えるのは、週の形式が2017_6, 2017_7であるためです。我々はすべてSQLの種類のような2017_1, 2017_10, 2017_11などSQLサーバー内での並べ替え

のような種類を知っている私は週フォーマットを変更せずに数値的にソートするにはどうすればいいですか?私はnvarcharを試しましたが、うまくいきませんでした。複数年にわたり

order by len(weekcol), weekcol 

答えて

4

一つの簡単な方法は、長さを使用することです

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

ニース小さなトリック。 )これはなぜ動作するいくつかの説明は、OPを助ける;) – TomTom

+0

私はまだ2017_1週の前に表示する必要がある2016から週を持っています。 –

0

あなたも、このフィールドの長さで並べ替えることができます。例えば:PARSENAMEを使用して

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

トリック、これは、任意の年の範囲で動作します:サンプルデータと

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

サンプルの実行:

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) 

結果:

2016_12 
2017_6 
2017_7 
2017_10 
2017_11 
関連する問題