2016-12-01 12 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は、一番上にする必要があります。 どのように私は何とかこれをdatetimeに変換し、実際に動作するようにソートするか、文字列全体の後にソートします。

-thanks

+3

適切なデータ型を使用してください。 varchar型の日付保管しないでください(または類似の) – jarlh

+0

これは、提出された日付のタイプではありません、SQL Serverのための日付形式が変換BY YYYY-MM-DD – freakydinde

+1

'ORDERある(DATE、DATECOLUMN、105)DESC' –

答えて

4

実際の日付

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

完全に感情に同意しましたが、 '103'が動作するのは驚きでした。 docsは '103 = dd/mm/yyyy'と' 105 = dd-mm-yyyy'と言う。それでも結果は同じです。奇妙な。セパレータ@Leigh – Leigh

+0

パターン(日付変換、(、103日、'30/2016' 分の11)変換、(、103セレクト変換日付、'30を-11-2016' )しようとする第二のように思わ、'30 0.11 .2016 '、103) –

+0

はい、間違いなく動作します。私はちょうどセパレーターが期待どおり/ドキュメントに記載されている異なる処理して驚いた。私はおそらくちょうど一貫性のために、 '105'を使用していますが、...有効なポイント@Leigh毎日:) – Leigh

1

にあなたのvarchar型に変換あなたはほぼ確実にパフォーマンスヒットがかかりますが、あなたはに列をキャストしてみてください

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

をお試しくださいソート時の日付型。

Order by CONVERT(Datetime, [date], 103) Desc, time DESC 
関連する問題