【问题标题】:Get the the last ms before tomorrow in SQL Server?在 SQL Server 中获取明天之前的最后一个毫秒?
【发布时间】:2012-02-26 15:19:42
【问题描述】:

我在 SQL Server 中使用Between 命令。

我需要找到:

 select * from MyTable where myDate
 between getdate() and [1ms before tomorrow  = 2012-02-26 :23:59:59:999]

我不想要 [2012-02-27:00:00:00:000],因为未来的查询应该使用该值。

所以我需要在明天之前 1 毫秒。

但是 - 这是我尝试过的,但由于某种原因它拒绝给我期望值! 并给我:2012-02-26 23:59:59.997 + 不可预知的结果!

这是为什么呢?我错过了什么?

我想得到2012-02-26 :23:59:59:999

【问题讨论】:

  • 为什么你需要使用BETWEEN?正如我在下面评论的那样,开放式范围更加更可靠。

标签: sql-server sql-server-2005 datetime


【解决方案1】:

为什么不指定一个独占范围呢?

SELECT * FROM `MyTable`
 WHERE `myDate` >= GETDATE() AND `myDate` < (tomorrow)

(我懒得去想明天的DATETIME,因为我通常是一个 MySQL 人,但我相信你已经知道该怎么做了。)

否则,您将无法处理精度有问题的浮点值。

【讨论】:

【解决方案2】:

SQL Server DATETIME 的准确度为 3.33 毫秒 - 您将始终.997 作为最接近一小时的值。就是这样,您无法在 SQL Server 2005 中更改它。在Demystifying the SQL Server DATETIME datatype 阅读有关它的所有信息。

在 SQL Server 2008 中,您可以使用精度为 100ns 的 DATETIME2 数据类型 - 因此“秒”小数点后最多有 7 个精确数字。

更新:如果你想用 DATETIME2 获得 .999,你需要使用:

DECLARE @dt2 DATETIME2
-- you need to cast GETDATE() to DATETIME2 - otherwise it's a DATETIME !
SET @dt2 = CAST(GETDATE() AS DATETIME2) 

DECLARE @dt2_Added DATETIME2
SET @dt2_Added = DATEADD(d, DATEDIFF(d, 0, @dt2) + 1, 0) 

SELECT DATEADD(ms, -1, @dt2_added)

结果:

2012-02-26 23:59:59.9990000

更新 #2: 事情变得更奇怪了.....

如果我使用SYSDATETIME() 而不是GETDATE(),它会从一开始就给我一个DATETIME2 - 但如果我一步完成计算:

DECLARE @dt2 DATETIME2
SET @dt2 = SYSDATETIME()

SELECT DATEADD(ms, -1, DATEADD(d, DATEDIFF(d, 0, @dt2) + 1, 0) )

我得到的结果是:

2012-02-27 00:00:00.000

但如果我分两步做同样的计算:

DECLARE @dt2 DATETIME2
SET @dt2 = SYSDATETIME()

DECLARE @dt2_Added DATETIME2
SET @dt2_Added = DATEADD(d, DATEDIFF(d, 0, @dt2) + 1, 0) 

SELECT DATEADD(ms, -1, @dt2_added)

我得到了预期的结果:

2012-02-26 23:59:59.9990000

这确实很奇怪……

【讨论】:

  • 我可以用 99:999 的值构建一个对象吗?
  • @RoyiNamir:使用 SQL Server 2005 DATETIME 数据类型
  • @RoyiNamir:这当然行不通.....GETDATE 返回一个 DATETIME - 除非你明确施放它!查看我的更新....
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2010-11-06
  • 2016-07-18
相关资源
最近更新 更多