DATEADD函数没有带来正确的SQL Server数据

时间:2017-10-09 17:00:10

标签: sql sql-server

我有一个实际上是日期的float数据类型。我需要在条件中使用它来获取最近10分钟的数据。 我使用CAST从float转换为datetime。然后DATEADD收集最后10分钟的数据但不起作用。

select  CAST(StartTime AS DATETIME) as StartTime
        ,CAST(endtime AS DATETIME) as EndTime
from    BIORADFM_TASK_AUDIT
where   CAST(StartTime AS DATETIME) >= DATEADD(minute, 10, GETDATE());

Result:

StartTime                EndTime
-----------------------  -----------------------
2017-10-12 16:57:06.997  2017-10-12 16:57:06.997
2017-10-12 06:06:59.997  2017-10-12 06:06:59.997
2017-10-12 06:06:47.997  2017-10-12 06:06:47.997
2017-10-11 16:04:53.000  2017-10-11 16:04:53.000

显示接下来两天的数据,而不是从getdate开始的最后10分钟。

Table Structure:
CREATE TABLE [dbo].[BIORADFM_TASK_AUDIT](
[STRGUID] [nvarchar](32) NOT NULL,
[ACTIVITYUSERID] [int] NOT NULL,
[ACTIVITYSESSIONID] [int] NOT NULL,
[ACTIVITYCODE] [int] NOT NULL,
[SERVERNAME] [nvarchar](256) NOT NULL,
[APPNAME] [nvarchar](20) NOT NULL,
[STARTTIME] [float] NOT NULL,
[ENDTIME] [float] NOT NULL,
[STRDESCRIPTION] [nvarchar](1000) NULL,
[STRMODULENAME] [nvarchar](300) NULL,
CONSTRAINT [PK_BIORADFM_TASK_AUDIT] PRIMARY KEY CLUSTERED 

示例数据:

StartTime           Endtime
43020.2549421296    43020.2549421296
43020.2550810185    43020.2550810185
43020.6342939815    43020.6342939815
43020.2548032407    43020.2548032407
43020.2548263889    43020.2548263889
43020.2549421296    43020.2549421296
43020.2549305556    43020.2549305556
43020.2549421296    43020.2549421296
43019.2549189815    43019.2549189815

3 个答案:

答案 0 :(得分:1)

请勿使用string.replace(/\+/g, ""); 。它计算两个日期/时间之间的“时间边界”的数量。

相反,使用日期算术:

datediff()

答案 1 :(得分:0)

因为我们没有什么可以合作的,所以只是一个疯狂的猜测。将日期时间数据存储为日期时间而不是字符串是个好主意,这样您就不必经常将数据转换为正确的数据类型。

SELECT A.strGUID
    , u.sUserName
    , A.ServerName
    , A.AppName
    , A.ActivityCode
    , CAST(A.StartTime AS DATETIME) as StartTime
    , CAST(A.endtime AS DATETIME) as EndTime
    , A.strModuleName
    , A.strDescription
    , GETDATE()
FROM INTRAWPROD_TASK_AUDIT A
join HSV_ACTIVITY_USERS u on A.ActivityUserID = u.lUserID 
where convert(datetime, a.StartTime) >= convert(datetime, dateadd(minute, -10, GETDATE()))

答案 2 :(得分:0)

如果您想要在过去10分钟内的行开始时间,则必须按范围进行过滤,例如使用(a, b) -> a | b

BETWEEN