2017-06-06 69 views
0

我正在嘗試對數據類型爲varchar的一週列進行排序,因爲這幾周的格式爲2017_6, 2017_7。因爲我們都知道SQL排序varchar數字像2017_1, 2017_10, 2017_11在SQL Server中排序

我怎樣才能得到它的數字排序,而不改變周格式?我試過nvarchar,但沒有奏效。

回答

4

一個簡單的方法是使用長度:

order by len(weekcol), weekcol 

對於多歲:

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

尼斯小技巧。一些解釋爲什麼這將工作將有助於OP;) – TomTom

+0

由len works訂購,但我仍然有幾個星期從2016年,需要出現在2017_1周前。 –

0

你也可以是用這種字段長度。例如:

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

使用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