2013-10-18 62 views
0

對於我的網站,我必須選擇在午夜(前一晚)和午夜(第二天晚上)之間發送的所有消息。基本上,這是一個24小時的範圍。SQL WHERE timestamp BETWEEN MIDNIGHT和MIDNIGHT

我不知道該怎麼做,因爲我將日期以時間戳格式存儲在我的數據庫中。例如,最後一條消息發佈在2013-10-18 11:23:35上。

我想要的是所有發佈在2013-10-18 00:00:002013-10-18 23:59:59之間的消息。 這是可能的,如果是的話,我怎麼能這樣做?

+0

什麼DB服務器是您使用與簡化呢? –

+0

我正在使用MySQL,並試圖使用以下查詢:'SELECT ID FROM ff_messages WHERE userid =:userid和date BETWEEN:minDate AND:maxDate'。在哪裏'minDate'和'maxDate'用我的php代碼生成'$ maxDay = date('Y-m-d'strtotime('+ 1 day'));' – Manitoba

回答

2

可以計算在T-SQL所需要的時間爲:

-- for previous day mid night as start time 
declare @start_datetime datetime,@end_datetime datetime 
Select @start_datetime = DATEADD(d,0,DATEDIFF(d,0,GETDATE())) 
-- for current day mid night as end time 
Select @end_datetime = DATEADD(SS,86399,DATEDIFF(d,0,GETDATE())) 

select @start_datetime, @end_datetime 

,然後使用您的列名,以檢查其是否在這兩個值之間存在。

+0

謝謝, – Manitoba

0

要了解DatetimeA和DatetimeB之間發生了什麼,sql關鍵字不是你的朋友。它通常會導致錯過記錄。這個構造更好。

where YourDateTimeField >= StartDateTime 
and YourDateTimeField < JustAfterTheEndDateTime 

在你的情況,你可以

where YourDateTimeField >= DateA 
and YourDateTimeField < TheDayAfterDateA