2

今日の固定タイミング (例: 18:00) と昨日の固定タイミング (例: 18:00) の間のレコードを取得する単純な SQL クエリを実装しようとしています。

SELECT * FROM [Table]
WHERE [Table].[Date Time] > Now()-1;

ただし、これは今日の現在のタイミングと昨日の時点の間のすべてのレコードを返します。

指定したタイミングでレコードを返す方法はありますか?

編集:このクエリを試しましたが、構文エラーがスローされます。

SELECT * FROM [Table]
WHERE [Date Time] BETWEEN FORMAT(DATEADD(DAY, - 1, NOW()) AS DATETIME) + FORMAT('18:00:00' AS TIME) AND FORMAT(NOW() AS DATETIME) + FORMAT('18:00:00' AS TIME);

何か助けはありますか?

4

6 に答える 6

1

可変日付値と固定時間値を追加する必要があります。

日付/時刻定数は、すべての異なるローカル形式で気まぐれになる可能性があります。これTimeSerialを回避できます:

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + TimeSerial(18,0,0) 
                              And Date()   + TimeSerial(18,0,0)

(最初の提案、ドイツの日付形式で動作します)

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + #18:00:00# And Date() + #18:00:00#

クエリ デザイナーは、これを自動的に次のように変更する場合があります。

Between Date()-1 + #12/30/1899 18:00:00# And Date() + #12/30/1899 18:00:00#

1899-12-30Access では「日付ゼロ」です。

于 2016-11-17T10:00:34.607 に答える
0

now() の代わりに date() を使用する

今日が 11 月 17 日 (いつでも) だとします。

昨日 16nov (00:00 -> 23:59) のレコードが必要な場合は、date()-1 を下限として、date() を上限として使用する必要があります。

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] between date()-1 and date()

今日の 17nov (00:00 -> 23:59) のレコードが必要な場合は、date() を下限として、date()+1 を上限として使用する必要があります。

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] between date() and date()+1

これは単純なバージョンで、境界に少し問題があります。正しいフィルターは (昨日の場合) である必要があります。

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] >= date()-1 [Table].[Date Time] < date()

または、今日の場合:

SELECT * 
FROM [Table]
WHERE [Table].[Date Time] >= date() [Table].[Date Time] < date()+1
于 2016-11-17T09:41:25.303 に答える