简体   繁体   中英

Not getting actual minutes in SQL DateDiff

I searched in different places and found below queries. I am using the following queries to get the actual minutes difference in SQL . The dates I provide are the same day. I need difference in minutes only but SQL is returning 35 instead of 5 minutes in the first query. And the second query return milliseconds.

 SELECT DATEDIFF(MINUTE,GETDATE(), CONVERT(datetime,'2016-08-11 16:04:24'))%3600/60 AS MinuteDiff 

 SELECT datediff(minute,GETDATE(), CONVERT(datetime,'2016-08-11 16:04:24')) as MinutesDiff

What is missing. Please help.

I need to put a condition that if time is less than 20 minutes then

do this

else

do this

Updated:

The issue occurs when i use GetDate(). When I use a fix date it works fine

Hey sorry for the initial poor explanation.

I use something like the following frequently this will return a INT and decide if it's then you can do the logic on it, equal to, not equal less than greater than etc.

If it is true it will return a 1 or it is false a 0. You can get it to return columns or set it to a string.

Hope it helps

select
   Case
   When DateDiff(minute,[column],Getdate()) > 20 then 1 else 0 
end as [alias]

You need to place the GETDATE() after your datetime value, other wise in your case you will get the minutes in negative value.

SELECT DATEDIFF(MINUTE,CONVERT(datetime,'2016-08-11 16:04:24'), GETDATE()) AS MinuteDiff 

The current GETDATE() is 2016-08-11 17:05:39.053 , so it returns 61 .

Then based on the value, using IF ... ELSE ... you can do your expected operation:

IF DATEDIFF(MINUTE,CONVERT(datetime,'2016-08-11 16:04:24'), GETDATE()) < 20
    PRINT 'With in 20 mins'
ELSE
    PRINT 'More than 20 mins'

Here is a working example of what your after...although you probably need to switch out the date components as appropriate for your usage.

    select 
            case
            when 
            (SELECT datediff(minute,GETDATE(), CONVERT(datetime,'2016-08-11 06:00:00'))) < 20 then
              (select 'do this') 
           else
              (select 'do something else')
           end as answer

If you want minute span between two datetime, then your second one is enough.

SELECT datediff(n, CONVERT(datetime,'2016-08-11 16:04:24'),GETDATE()) as MinutesDiff

you can use CASE for your further

select 
    case when 
           datediff(n, CONVERT(datetime,'2016-08-11 16:04:24'),GETDATE()) < 20 then
              `your code`
           else
              `your else code`
           end minte

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM