データ型がvarchar
の週の列を並べ替えるのは、週の形式が2017_6, 2017_7
であるためです。我々はすべてSQLの種類のような2017_1, 2017_10, 2017_11
などSQLサーバー内での並べ替え
のような種類を知っている私は週フォーマットを変更せずに数値的にソートするにはどうすればいいですか?私はnvarchar
を試しましたが、うまくいきませんでした。複数年にわたり
order by len(weekcol), weekcol
:
データ型がvarchar
の週の列を並べ替えるのは、週の形式が2017_6, 2017_7
であるためです。我々はすべてSQLの種類のような2017_1, 2017_10, 2017_11
などSQLサーバー内での並べ替え
のような種類を知っている私は週フォーマットを変更せずに数値的にソートするにはどうすればいいですか?私はnvarchar
を試しましたが、うまくいきませんでした。複数年にわたり
order by len(weekcol), weekcol
:
一つの簡単な方法は、長さを使用することです
order by left(weekcol, 4), len(weekcol), weekcol
あなたも、このフィールドの長さで並べ替えることができます。例えば:PARSENAME
を使用して
SELECT ........ order by len(myfield),myfield
トリック、これは、任意の年の範囲で動作します:サンプルデータと
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
ニース小さなトリック。 )これはなぜ動作するいくつかの説明は、OPを助ける;) – TomTom
私はまだ2017_1週の前に表示する必要がある2016から週を持っています。 –