2013-05-11 9 views
5

このクエリに問題があります。私は、彼らが現在のSYSTIMESQL - 将来の日付時刻のクエリ条件

SELECT * 
    FROM TABLE 
WHERE DATE>= CONVERT(date, SYSDATETIME()) 
    AND STARTTIME > CONVERT(time, SYSDATETIME()) 

これは、クエリで合格した場合でも、現在の日付のSYSTIMEに合格したレコードを選択しますが、将来の日付のレコードを表示しないようにしたいです。私はそれがなぜ機能しないのか知っていますが、私は上記のことをする方法を考えることができません。

+2

rdbmsは何ですか?過去のレコードも選択したいですか? –

+0

ASPサイト用のSQL Server – user2321895

+0

いいえ、私はすでに過去の日付を処理していませんでした。現在および将来のレコードのみを表示したいと思います。しかし、現在の日付については、現在のシステム時間の後にあるものと、今日の日付ではない将来の記録のみを記録する。どんなときも。 – user2321895

答えて

5
SELECT * 
FROM TABLE 
WHERE 
    (
    (DATE = CONVERT(date, SYSDATETIME() 
    AND STARTTIME > CONVERT(time, SYSDATETIME() 
    ) 
    OR Date > sysdatetime() 
) 

日付の時刻が異なるフィールドになっているため、今日の日付と時刻、その後のすべての将来の日付を時間に関係なく解決する必要があります。

0

これは、元のデータタイプが何であるかによって大きく異なります。それらがdate,time、またはdatetimeと仮定しましょう。

あなたが将来的に何かをしたい場合は、この作品:

where [date] + starttime > sysdatetime() 

あなただけの将来日付をしたい場合は、試してみてください。

where [date] > cast(sysdatetime() as date) 

を、後者は、私はあなたの質問をどのように解釈するかです、私の解釈が正しいことを100%確信しているわけではありません。

+1

私はあなたが '[date]'の代わりに '[date]'を意味すると思います –

+0

私は上記の誤字を訂正しました – davmos

0

DATEADDDATEDIFFの機能を見てください。

SELECT Date, 
     TomorrowMidnight = Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0), 
     TomorrowTimeNow = Dateadd(dd, 1, Getdate()) 
FROM dbo.test 
WHERE date >= Getdate() 
     AND date < Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0) 
     OR date > Dateadd(dd, 1, Getdate()) 

これは、後に(今+ 1日)より前の明日の深夜よりも後になりましたが、よりdatetimeを持つすべての行と列datetimeを持つすべての行を選択します。

DEMO

編集:私はtime列を見落としてきました。たぶんあなたの要件を明確にするために使ったことがありますが、私の答えは実際にはdatetimeという列があります。