2012-04-05 23 views
5

DateTimeSyncDateに基づいて選択するクエリを作成しようとしています。2つの時刻の間で選択するクエリ

いくつかの背景として、私が照会するテーブルは、毎日まったく同じ時刻に毎日何千ものインポートを取得します。私は、「通常の」時刻にインポートしなかったエントリを探したい。

したがって、DateTime列の時刻が2つの間のどこにあるかを照会したいと思います。どの日/月/年の期間でも14:00-14:30(2-230)と言うことができます。

SELECT * FROM MyTable 
WHERE DatePart(SyncDate, ..?) BETWEEN (14:00..?) and (14:30..?) 

DatePart機能は、私は必要なもののようですが、私はこのような状況にそれを適用する方法を理解していません。あなたの助けは偉大なクエリアに非常に感謝しています。

EDIT:私は間違っていました。私はバックエンドとしてSQL Server 2005を実行しています。ごめんなさい!

答えて

21

は、SQL Server にしているので、あなたは新しいTIMEデータ型を使用することができます:

を:あなたのバックエンドは、あなたのようなものを必要とするだろう、まだ:-) 2008でない場合

SELECT * FROM MyTable 
WHERE CAST(SyncDate AS TIME) BETWEEN '14:00' and '14:30' 

SELECT * FROM MyTable 
WHERE DATEPART(HOUR, SyncDate) = 14 AND DATEPART(MINUTE, SyncDate) BETWEEN 0 AND 30 

14:00-14:30時間を確認してください。

+0

奇妙な。 2008年には、「時間」をキーワードとして認識しますが、「定義されたシステムタイプ」ではないと言います。 – ImGreg

+0

サーバーのバックエンドで2008年が実行されているか、それともSQL Server Mgmt Studioのコピーのみですか? 2008 R2でそれをチェックし、それはちょうどうまくいくはずです.... –

+0

あなたは正しい、スタジオだけです。バックエンドはMDACのバージョンですか、それをどのようにチェックしますか? – ImGreg

2

これはどのように....

select * from MyTable where 
cast(cast(datepart(HH,SyncDate) as char(2)) + cast(datepart(HH,SyncDate) as char(2)) as int) between 1400 and 1430 
+0

iffyメソッドの種類。しかし、キャストをintとして取り出し、アポストロフィを「1400」の周りに置くと、実際に動作します。 +1は革新的なアプローチです。 – ImGreg

関連する問題