我正在嘗試對數據類型爲varchar
的一週列進行排序,因爲這幾周的格式爲2017_6, 2017_7
。因爲我們都知道SQL排序varchar
數字像2017_1, 2017_10, 2017_11
等在SQL Server中排序
我怎樣才能得到它的數字排序,而不改變周格式?我試過nvarchar
,但沒有奏效。
我正在嘗試對數據類型爲varchar
的一週列進行排序,因爲這幾周的格式爲2017_6, 2017_7
。因爲我們都知道SQL排序varchar
數字像2017_1, 2017_10, 2017_11
等在SQL Server中排序
我怎樣才能得到它的數字排序,而不改變周格式?我試過nvarchar
,但沒有奏效。
一個簡單的方法是使用長度:
order by len(weekcol), weekcol
對於多歲:
order by left(weekcol, 4), len(weekcol), weekcol
你也可以是用這種字段長度。例如:
SELECT ........ order by len(myfield),myfield
使用PARSENAME
把戲,這將與任何一年範圍內工作:
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
由len works訂購,但我仍然有幾個星期從2016年,需要出現在2017_1周前。 –