2011-08-05 13 views
3

私はSQLクエリをC#で渡そうとしていますが、現在は時刻が常に0に設定されている唯一の月と年に基づいています。EG 1997-10-28 00.00.00.000私はちょうどどこの日付がカレンダーの日付に等しいかを選択する。長い日付時刻のSQLクエリ?

開始フィールドでは、各レコードで時間が異なります(例:1899-12-30 14.14:00.00.000、1899-12-30 15.14:30.00.000)。 (秒数は常に同じです)。

"開始"フィールドに選択した日付のすべての結果を返すクエリが必要です。どうすればいい?

E.G私は1997-10-28 00.00.00.000を通過するカレンダーをクリックすると、その日の毎回の結果が欲しいです!それについてどうすればいいですか?

ありがとうございます。

編集:私はSQLで持っている日付を書式設定する方法はありますか?これは古いアクセスデータベースから来ます!あなたが上に見ることができるように、それは1899-12-30ですか? 1998年ではなく、なぜこれが起こったのか分かりません!

答えて

3
WHERE DATEDIFF(dd, your_start_field, @your_param) = 0 
+0

-1。テーブルスキャン、素晴らしいパフォーマンスを強制します。 – TomTom

0

日付部分だけを照会することはできません。私は、これは動作するはずだと思う...

SELECT * FROM Table1 WHERE StartDate = '1997-10-28' 

はEDIT:上記は動作しないかもしれないが、ニーズ

SELECT * FROM Table1 WHERE StartDate >= '1997-10-28 00:00:00.000' AND StartDate < '1997-10-29 00:00:00.000' 

(第2日は次の日付で気づく)

+0

開始日、それは動作しないように日付の時刻部分を含んでいます。 –

+0

@Bob Vale、編集はどうですか?これでうまくいくでしょう – musefan

+0

はい動作します。しかし、 '1997-10-28 00:00:00.000'と '1997-10-28 23:59:59.997'の間のSELECT * FROM Table1 WHERE StartDateを実行することができます。 –

0

にこのSQLをカバーする必要があり、次のDATEADD(d,datediff(d,0,startdate),startdate)日付と時刻をちょうど日付に変換します。

例えば

Select field1,field2 from mytable where DATEADD(d,datediff(d,0,startdate),startdate)='1997-10-28' 
3

あなたは明日の日付を含めずに今日と明日の間のすべてのレコードを選択する必要があります。

WHERE EventDate >= StartDate AND EventDate < DATEADD(d, 1, StartDate) 
+0

+1 - 正確に。スタッドを計算して終了し、それで終わってください。 – TomTom