December 30, 2014 at 8:35 am
All,
I have been programming in T-SQL for a while. I still love what I do since there is still so much to learn. I ran across one of these "Duh, I didn't know that" moments today. You can subtract and add DECIMAL values to a datetime value.
I do a lot of programming/testing involving batch jobs, data inserts and updates and I need to see the records created/updated in the last day/hour/minutes. I always modified the datetime value in my comparison to get the results until I tried subtracting a decimal value from getdate().
WOW!!! Do I love this stuff. Hope this helps.
Anton
For example:
declare @Now datetime = getdate()
-- 24 hours
select '1', getdate() - 1, datediff(hour, @Now, getdate() - 1)
-- 12 hours
select '.5', getdate() - .5, datediff(hour, @Now, getdate() - .5)
-- 6 hours
select '.25', getdate() + .25, datediff(hour, @Now, getdate() + .25)
-- 144 minutes
select '.1', getdate() - .1, datediff(minute, @Now, getdate() - .1)
-- 72 minutes
select '.05', getdate() - .05, datediff(minute, @Now, getdate() - .05)
-- 15 minutes
select '.01', getdate() - .01, datediff(minute, @Now, getdate() - .01)
December 30, 2014 at 9:17 am
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.
For example, .01 translates into 864 seconds instead of 900 seconds. To get the exact 15 minutes, you need to use something like 0.010416666667.
December 30, 2014 at 9:34 am
Watch datetime v datetime2 for things as well.
December 30, 2014 at 9:58 am
Steve Jones - SSC Editor (12/30/2014)
Watch datetime v datetime2 for things as well.
As well as the new DATE and TIME types in 2008. Good MSDN blog article on the new types:
http://blogs.msdn.com/b/cdnsoldevs/archive/2011/06/22/why-you-should-never-use-datetime-again.aspx
I think the new year will require some time learning the "new" stuff.
This never gets boring does it?
Happy New Year everyone,
Anton
December 30, 2014 at 11:30 am
aochss (12/30/2014)
This never gets boring does it?
Happy New Year everyone,
Anton
Nope, and Happy New Year to you
December 30, 2014 at 3:34 pm
aochss (12/30/2014)
All,I have been programming in T-SQL for a while. I still love what I do since there is still so much to learn. I ran across one of these "Duh, I didn't know that" moments today. You can subtract and add DECIMAL values to a datetime value.
I do a lot of programming/testing involving batch jobs, data inserts and updates and I need to see the records created/updated in the last day/hour/minutes. I always modified the datetime value in my comparison to get the results until I tried subtracting a decimal value from getdate().
WOW!!! Do I love this stuff. Hope this helps.
Anton
For example:
declare @Now datetime = getdate()
-- 24 hours
select '1', getdate() - 1, datediff(hour, @Now, getdate() - 1)
-- 12 hours
select '.5', getdate() - .5, datediff(hour, @Now, getdate() - .5)
-- 6 hours
select '.25', getdate() + .25, datediff(hour, @Now, getdate() + .25)
-- 144 minutes
select '.1', getdate() - .1, datediff(minute, @Now, getdate() - .1)
-- 72 minutes
select '.05', getdate() - .05, datediff(minute, @Now, getdate() - .05)
-- 15 minutes
select '.01', getdate() - .01, datediff(minute, @Now, getdate() - .01)
You can also subtract one DATETIME from another to get duration and then easily format it. See the following article on that.
http://www.sqlservercentral.com/articles/T-SQL/103343/
What a lot of folks also miss is that you can add and subtract formatted times as constants instead of jumping through multiple datepart hoops, as well.
SELECT GETDATE(), GETDATE()+'17:02:23.037'
;
As you've also been previously warned, none of that stuff works with any of the other date/time datatypes except for SMALLDATETIME. Why the monks in Redmond decided to leave such a great capability off the "new" datatypes is anyone's guess.
--Jeff Moden
Change is inevitable... Change for the better is not.
December 30, 2014 at 3:52 pm
Jeff Moden (12/30/2014)
What a lot of folks also miss is that you can add and subtract formatted times as constants instead of jumping through multiple datepart hoops, as well.
SELECT GETDATE(), GETDATE()+'17:02:23.037'
;
As you've also been previously warned, none of that stuff works with any of the other date/time datatypes except for SMALLDATETIME. Why the monks in Redmond decided to leave such a great capability off the "new" datatypes is anyone's guess.
I believe datetime handles that just fine; datetime2 does not.
SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".
December 30, 2014 at 4:01 pm
ScottPletcher (12/30/2014)
Jeff Moden (12/30/2014)
What a lot of folks also miss is that you can add and subtract formatted times as constants instead of jumping through multiple datepart hoops, as well.
SELECT GETDATE(), GETDATE()+'17:02:23.037'
;
As you've also been previously warned, none of that stuff works with any of the other date/time datatypes except for SMALLDATETIME. Why the monks in Redmond decided to leave such a great capability off the "new" datatypes is anyone's guess.
I believe datetime handles that just fine; datetime2 does not.
I didn't make that obvious at all, did I? :blush: I was hitching a ride on the previous post that was talking about it working on DATETIME and didn't explicitly state that. When I said "other", I meant other than DATETIME.
Yes, absolutely correct. It only works on the SMALLDATETIME and DATETIME datatypes.
--Jeff Moden
Change is inevitable... Change for the better is not.
December 31, 2014 at 1:32 am
Luis Cazares (12/30/2014)
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.
It's also far less clear than a DATEADD for anyone coming along later and maintaining your code.
SELECT Getdate()-(1/3.0) vs SELECT DATEADD(hh,-8,getdate())
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
January 2, 2015 at 1:02 am
GilaMonster (12/31/2014)
Luis Cazares (12/30/2014)
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.It's also far less clear than a DATEADD for anyone coming along later and maintaining your code.
SELECT Getdate()-(1/3.0) vs SELECT DATEADD(hh,-8,getdate())
Agreed, but since we're going for clarity as well, why not HOUR instead of "hh"?! I don't get the obsession with using abbrevs for date/time parts, since the full name is usually not that much longer and is 100% clear (Edit: with exceptions for mcs, ms and ns).
SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".
January 2, 2015 at 8:09 am
ScottPletcher (1/2/2015)
GilaMonster (12/31/2014)
Luis Cazares (12/30/2014)
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.It's also far less clear than a DATEADD for anyone coming along later and maintaining your code.
SELECT Getdate()-(1/3.0) vs SELECT DATEADD(hh,-8,getdate())
Agreed, but since we're going for clarity as well, why not HOUR instead of "hh"?! I don't get the obsession with using abbrevs for date/time parts, since the full name is usually not that much longer and is 100% clear (Edit: with exceptions for mcs, ms and ns).
THAT I can answer. I hate Pink! 😉
--Jeff Moden
Change is inevitable... Change for the better is not.
January 5, 2015 at 1:27 am
ScottPletcher (1/2/2015)
GilaMonster (12/31/2014)
Luis Cazares (12/30/2014)
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.It's also far less clear than a DATEADD for anyone coming along later and maintaining your code.
SELECT Getdate()-(1/3.0) vs SELECT DATEADD(hh,-8,getdate())
Agreed, but since we're going for clarity as well, why not HOUR instead of "hh"?!
Old habit 😉 , although I only ever use the abbreviations for hour, year and millisecond (and quarter, but I don't recall the last time I needed to DATEADD a quarter). Can never remember which abbreviation is minute or month, so those always get written out in full.
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
January 6, 2015 at 11:01 am
ScottPletcher (1/2/2015)
GilaMonster (12/31/2014)
Luis Cazares (12/30/2014)
Yes, it's possible, but I wouldn't advice on using decimals on calculations as it's easy to get it wrong.It's also far less clear than a DATEADD for anyone coming along later and maintaining your code.
SELECT Getdate()-(1/3.0) vs SELECT DATEADD(hh,-8,getdate())
Agreed, but since we're going for clarity as well, why not HOUR instead of "hh"?! I don't get the obsession with using abbrevs for date/time parts, since the full name is usually not that much longer and is 100% clear (Edit: with exceptions for mcs, ms and ns).
Oh yes. Very clear. If one is speaking English.:w00t:
ATBCharles Kincaid
Viewing 13 posts - 1 through 12 (of 12 total)
You must be logged in to reply to this topic. Login to reply