2016-11-02 4 views
0

前のレコード "16Oct310001"の "16Nov010001"を取得すると問題が発生します。SQL Serverでdateformat(dd/MMM/yyyy)の前のレコードを取得するには

私は日付とシリアル番号で注文しようとしていますが、動作しません。どうすればこの問題を解決できますか?

私のクエリは、次のとおりです。

SELECT TOP (1) serialno 
FROM dbo.Table 
WHERE (serialno < '16Nov010001') 
ORDER BY tranferdate, serialno DESC 

SELECT TOP (1) serialno 
FROM dbo.Table 
WHERE serialno < '16Nov010001' 
ORDER BY serialno DESC 

表レコード:あなたは、文字列を別の文字列よりも小さいことを言ってどこ使用しようとしている

serialno |   date 
------------------------------------------ 
16Nov010001 | 2016-11-01 11:28:40.640 
16Nov010002 | 2016-11-01 11:32:38.530 
16Nov010003 | 2016-11-01 11:35:08.437 
16Nov010004 | 2016-11-01 11:36:30.117 
16Nov010005 | 2016-11-01 11:37:01.760 
16Nov010006 | 2016-11-01 11:39:45.393 
16Oct300001 | 2016-10-30 19:40:29.963 
16Oct310001 | 2016-10-31 18:42:45.833 
+1

期待出力? –

+0

'transferdate'はdatetime列ですか? –

+0

yes.transferdateはdatetime列です。実際には、前のレコードの「16Nov010001」は「16Oct310001」です。 –

答えて

0

あなたが投稿した所望の出力は、我々は、彼らが< =「16Nov010001」

あるとして、それはできるだけ多くのレコードが返されますので、私は、TOP 1を削除している。このクエリによって

SELECT serialno, date 
FROM dbo.Table 
WHERE serialno <= '16Nov010001' 
ORDER BY serialno DESC 

を返します

PS:日付文字列の順序は日付値と同じではないことに注意してください。例 '16Dic010001' < '16Nov010001'の場合だから、あなたは "serialno"の代わりに "date"で比較して注文することを好むかもしれません。

SELECT serialno, date 
FROM dbo.Table 
WHERE date <= '2016-11-01' 
ORDER BY serialno DESC 
0

、そのあなたがそれをするために注文したい場合、おそらく日付はあなたが日付を使用することができた順序と同じです代わりに、私があなたのデータで見た限りでは動作します。

2016-11-01 11:28:40.640 で作成された16Nov010001があり、2016-11-01 11:32:38.530の4分後に作成された16Nov010002があります。

をご覧ください。 Use '=' or LIKE to compare strings in SQL?

関連する問題