[英]DATEADD function is not bringing the correct data 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
不要使用datediff()
。 它计算两个日期/时间之间的“时间边界”数。
而是使用日期算术:
WHERE A.ActivityUserID = B.lUserID and
CAST(A.StartTime AS DATETIME) >= DATEADD(minute, -10, GETDATE())
只是一个疯狂的猜测,因为我们没有任何合作可做。 将datetime数据存储为datetime而不是字符串是一个好主意,这样您就不必不断将数据转换为正确的数据类型。
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()))
如果要使行的开始时间仅位于最近的10分钟内,则必须按范围进行过滤,例如使用BETWEEN
:
SELECT CAST(StartTime AS DATETIME) AS StartTime, CAST(endtime AS DATETIME) AS EndTime
FROM BIORADFM_TASK_AUDIT
WHERE CAST(StartTime AS DATETIME) BETWEEN DATEADD(minute,-10,GETDATE()) AND GETDATE()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.