gpt4 book ai didi

c# - SQL Server 中奇怪的时差

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:51 25 4
gpt4 key购买 nike

我有一个如下所述的 SQL 表,其中每 30 分钟包含 1 条记录以及其他一些列 -

ID | dt
1 | 2015-08-08 23:30:00.000
2 | 2015-08-08 23:00:00.000
3 | 2015-08-08 22:30:00.000
4 | 2015-08-08 22:00:00.000
5 | 2015-08-08 21:30:00.000

我运行以下查询以从 SQL Server 获取昨天的所有记录。

select ID, dt from tbl1
WHERE DATEADD(dd, DATEDIFF(dd, 0, dt), 0) >= DATEADD(dd, DATEDIFF(dd, 0, @StartDate), 0)
and DATEADD(dd, DATEDIFF(dd, 0, dt), 0) <= DATEADD(dd, DATEDIFF(dd, 0, @EndDate), 0)

当我将参数作为 StartDate = '2015-08-08 12:00:00' and EndDate='2015-08-08 06:30:00' 发送时,查询运行正常并返回结果但是当 StartDate = '2015-08-08 12:00:00' and EndDate='2015-08-08 06:00:00' 时它不返回任何记录或者当 EndDate 明确小于“2015-08-08 06:30:00”时。我跑了SELECT GETDATE()在服务器上,它返回与服务器时钟显示的时间相同的时间。

编辑

代码通过每 30 分钟运行一次的 Windows 服务执行。该应用程序假设在凌晨 1:00 运行,检索上次日期的记录并执行操作,但如前所述,记录仅在早上 6:30 后返回,目前我只能在早上 7 点运行该服务而不是凌晨 1 点。

当我将服务设置为从我的本地计算机运行时,它在凌晨 1 点运行良好并返回结果,但在生产服务器上,它在早上 6:30 之前不返回任何记录。

我不知道为什么会出现这种差异。任何帮助表示赞赏。

如果您需要更多说明,我会在这里回答。

最佳答案

您最初问过为什么当 @StartDate 为“2015-08-08 12:00:00”且 @EndDate 为“2015-08”时没有收到任何记录-08 06:30:00'。请理解,在这种情况下,@StartDate@EndDate 之后,因此您永远不会获得大于 @StartDate< 的 dt 且小于 @EndDate

话虽如此,您显然想使用 @StartDate@EndDate 参数的 FLOOR(即忽略时间部分)而不是原始使用它们,那又怎样你可以这样做:

  • 单独舍入 @StartDate@EndDate 参数
  • @EndDate上加一天
  • tbl 中选择所有记录,其中 dt 在修改后的 @StartDate@EndDate 之间
    • 适当调整运算符以包含/排除 @EndDate 的确切值

此示例假定您的代码作为存储过程的一部分被调用,并将选择大于或等于 @StartDate 但小于 @EndDate 的所有日期(您不需要对 dt 应用相同的转换):

-- Swap @StartDate and @EndDate values if need be
IF(@StartDate > @EndDate)
BEGIN
DECLARE @TempDate DATETIME;
SET @TempDate = @StartDate;
SET @StartDate = @EndDate;
SET @EndDate = @TempDate;
END;

-- Deliberately set @EndDate to one more than specified
-- Example case:
-- Before After
-- @StartDate '2015-08-08 06:30:00' => '2015-08-08 00:00:00'
-- @EndDate '2015-08-08 12:00:00' => '2015-08-09 00:00:00'
SET @StartDate = dateadd(day,datediff(day,0,@StartDate),0);
SET @EndDate = dateadd(day,datediff(day,0,@StartDate)+1,0);

-- Query
select ID, dt from tbl1
WHERE dt >= @StartDate
and dt < @EndDate

关于c# - SQL Server 中奇怪的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31912494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com