【发布时间】:2016-04-04 15:52:56
【问题描述】:
早上好,
我正在尝试删除几个查询中的一些手动输入,这些查询每周检索通过我们的界面传输的大量结果。即日期时间函数和几个case函数。我想先处理日期时间,因为案例陈述不需要每周更新一次,只有在添加新客户时才需要。
过去我们一直在手动编辑数据以选择最近 7 天的数据。
例子:
WHERE (MessageReceivedDateTime >= '12/23/15 05:00'
AND MessageReceivedDateTime < '12/28/15 05:00')
我能够使用下面建议的代码来检索我们数据库中最近 7 天的数据,并且其中一天似乎缺少一些值。我认为这是因为我在查询中没有时间偏移量。
建议:
(MessageReceivedDateTime between DateAdd(DD,-7,GETDATE() ) and GETDATE())
更新它的部分目标是确保我们不需要每周手动编辑日期/时间。我进行了谷歌搜索并搜索了论坛,但没有看到任何特定于这个问题的内容。任何额外的帮助/解释将不胜感激。
如果我错误地选择了 tSQL,我也想提前道歉,我的 SQL 培训一直在工作,我们有 Oracle 和 Microsoft SQL Server Management Studio,我在 Management Studio 中运行上述查询并相信它们成为 tSQL。
---- 编辑以提供最终解决方案----
DECLARE @StartTime DATETIME = (DATEADD(Day, 0, DATEDIFF(Day, 0, GetDate())-7));
DECLARE @EndTime DATETIME = DATEADD(Day, 0, DATEDIFF(Day, 0, GetDate()));
SET @StartTime = DATEADD(hh,(-dbo.fn_GetUTCOffset(@StartTime)),@StartTime);
SET @EndTime = DATEADD(hh,(-dbo.fn_GetUTCOffset(@EndTime)),@EndTime);
WHERE MessageReceivedDateTime >= @StartTime
AND MessageReceivedDateTime < @EndTime
在我的特殊情况下,我在最后一天唯一需要担心的是确保考虑到我的 UTC 偏移量。我使用我们设置的 -dob.fn 处理。它会根据一年中的时间增加 5 或 4。
【问题讨论】:
-
似乎缺少哪些值
-
飞盘,我比较了两个查询,并且 DateAdd 之间在查询的第一天遗漏了大约 5,000 个结果。我本来希望这些数字更接近实际。虽然我认为 Steven 使用日期时间对 Getdate 函数的解释是减去 7 天,但将其保留为清晨,我希望检索的是整个天的值,以便比较两个查询是否工作相似。
-
但是您甚至没有在 > 12/23/15 05:00 检索一整天
-
飞盘,通常在我们的例子中,我们使用 05:00 作为 UTC 偏移量,现在显然是午夜,我假设没有这个偏移量它会返回一整天,不知道为什么我想老实说。这解释了我之前在 Gordon 的线程上的 cmets。
标签: sql-server-2008 tsql datetime