【问题标题】:SQL WHERE timestamp BETWEEN MIDNIGHT AND MIDNIGHTSQL WHERE 时间戳在 MIDNIGHT 和 MIDNIGHT 之间
【发布时间】:2013-10-18 09:35:25
【问题描述】:

对于我的网站,我必须选择午夜(前一天晚上)和午夜(第二天晚上)之间发送的所有消息。基本上,它是一个 24 小时的范围。

我不知道该怎么做,因为我将日期以时间戳格式存储在我的数据库中。例如,最后一条消息发布在 2013-10-18 11:23:35

我想要的是在2013-10-18 00:00:002013-10-18 23:59:59 之间发布的所有消息。 这可能吗,如果可以,我该怎么做?

【问题讨论】:

  • 你使用的是什么数据库服务器?
  • 我正在使用 MySQL,并尝试使用以下查询:SELECT id FROM ff_messages WHERE userid=:userid AND date BETWEEN :minDate AND :maxDate。其中minDatemaxDate 是用我的php 代码生成的$maxDay = date('Y-m-d' strtotime('+1 day'));

标签: sql date timestamp between


【解决方案1】:

您可以将 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

然后使用你的列名来检查这两个值之间是否存在。

【讨论】:

    【解决方案2】:

    要找出DatetimeA 和DatetimeB 之间发生了什么,之间的sql 关键字不是你的朋友。它通常会导致一个人错过记录。这个结构更好。

    where YourDateTimeField >= StartDateTime
    and YourDateTimeField < JustAfterTheEndDateTime
    

    在你的情况下,你可以简化它

    where YourDateTimeField >= DateA
    and YourDateTimeField < TheDayAfterDateA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2018-09-06
      • 2013-03-22
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多