1

次のいずれかを使用する前に、DateTimeに基づいて行を選択しました。

DATEADD(day, -1, GetDate()) AND GETDATE()

昨日からの最新の記録を取得するために、そして

 DECLARE @today DATETIME = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)  
DATEADD(mi, 00, DATEADD(hh, 8, @today)) AND DATEADD(hh, 9, @today)

当日から特定の時間枠の間にある行を取得するため。これで、時刻と日付の列が別々になっているテーブルがあるため、これらは両方とも機能しません。上記の方法のいずれかを実行しようとすると、「データ型timeとdatetimeは、以上の演算子で互換性がありません」というエラーが常に発生します。問題は、参照するDateTime型の列がないことです。別々の時間と日付のフィールドを参照する特定の時間枠の間に行を取得する方法はありますか?ありがとう

4

2 に答える 2

2

[日付]フィールドと[時刻]フィールドを一緒に追加して、比較する単一の日付/時刻フィールドを作成できます。

create table #temp (id int, d date, t time)
insert into #temp values (1, '1/1/2000', '1:00 PM')
insert into #temp values (2, '1/1/2000', '2:00 PM')
insert into #temp values (3, '1/1/2000', '3:00 PM')

select * from #temp where cast(d as datetime) + cast(t as datetime) between '1/1/2000 1:10 PM' and '1/1/2000 2:30 PM'

したがってDATEADD()、正しく設定されていれば、次のことができます。

SELECT * FROM sometable WHERE cast(DateField as datetime) + cast(TimeField as datetime) BETWEEN DATEADD(mi, 00, DATEADD(hh, 8, @today)) AND DATEADD(hh, 9, @today)
于 2012-07-02T13:48:15.510 に答える
1
DECLARE @today DATE = SYSDATETIME();
DECLARE @start DATETIME = DATEADD(HOUR, 8, @today);
DECLARE @end   DATETIME = DATEADD(HOUR, 1, @start);

SELECT ... FROM dbo.table ...
WHERE date_column = @today -- to narrow search first, efficiently, if indexed
AND DATEADD(DAY, DATEDIFF(DAY, 0, date_column), CONVERT(DATETIME, time_column)) >= @start
AND DATEADD(DAY, DATEDIFF(DAY, 0, date_column), CONVERT(DATETIME, time_column)) <  @end;
---- you may want <= here rather than <
于 2012-07-02T13:55:35.137 に答える