簡體   English   中英

DATEADD函數未帶來正確的數據SQL Server

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM