2016-12-01 368 views
1

按日期排序會給出錯誤的輸出。輸入的日期是以字符串或Varchar(50)的形式輸入和存儲的,所以當我對它進行排序時,它只採用了示例「22-11-2016」的第一部分,所以「22」。太澄清:這是我出來就是:按日期排序字符串MSSql

enter image description here

用下面的查詢字符串:

SELECT TOP 1 CHECKEDIN, DATE 
FROM timereg 
WHERE UNILOGIN = @unilogin 
ORDER BY DATE DESC, TIME DESC 

,並明確列9應該是在上面,因爲它後來是一個月。 我將如何將其以某種方式轉換爲日期時間並對其進行排序,以便它實際上可以正常工作,或僅在整個字符串之後進行排序。

-Thanks

+3

使用正確的數據類型。不要將日期存儲在varchar(或類似的)中。 – jarlh

+0

這個字段不是日期類型,sql服務器的日期格式是YYYY-MM-DD – freakydinde

+1

'ORDER BY convert(DATE,DATECOLUMN,105)DESC' –

回答

4

將您VARCHAR到實際日期

... ORDER BY convert(date,DATE,103) DESC 
+0

完全同意這種觀點,但對'103'的作品感到驚訝。文檔說'103 = dd/mm/yyyy'和'105 = dd-mm-yyyy'。但結果是一樣的。奇怪的。 – Leigh

+0

@Leigh分隔符似乎是第二個模式嘗試選擇轉換(日期,'30 -11-2016',103),轉換(日期,'30/11/2016',103),轉換(日期,'30 .11 .2016',103) –

+0

是的,它絕對有效。我只是感到驚訝,它處理的分隔符與文檔中預期的/描述的不同。我可能會使用'105',只是爲了一致的緣故,但是..每天學習新的東西:) – Leigh

1

嘗試

ORDER BY CONVERT(DATETIME, DATE, 105) DESC 
0

你幾乎肯定會採取的性能損失,但你可以嘗試列轉換爲一日期類型時排序。

Order by CONVERT(Datetime, [date], 103) Desc, time DESC