

SSCForever
Group: General Forum Members
Last Login: Today @ 7:08 PM
Points: 42,059,
Visits: 39,442





SSC Rookie
Group: General Forum Members
Last Login: Tuesday, September 22, 2015 6:55 PM
Points: 47,
Visits: 130


Damnit! I went to vote 5 stars and the location of the 5th star changed so it hit 2?!? Can I change it?




SSCForever
Group: General Forum Members
Last Login: Today @ 7:08 PM
Points: 42,059,
Visits: 39,442





SSCForever
Group: General Forum Members
Last Login: Today @ 7:08 PM
Points: 42,059,
Visits: 39,442


You can tell a lot about the stars this early in the game. There was an accidental "2", and then a "5" for a total of 7/2 stars. Now the average is back down to "2" which means a couple of folks gave the article some really low marks. The problem is, they didn't take the time to explain why in this discussion, so I have to guess why that may be and don't actually learn anything from them.
Jeff Moden "RBAR is pronounced "reebar" and is a "Modenism" for "RowByAgonizingRow".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
Helpful Links: How to post code problems How to post performance problems




SSC Rookie
Group: General Forum Members
Last Login: Tuesday, September 22, 2015 6:55 PM
Points: 47,
Visits: 130


My only feedback is I'm a big fan of sticking to integer arithmetic where possible so a few neat tricks there!




SSCForever
Group: General Forum Members
Last Login: Today @ 7:08 PM
Points: 42,059,
Visits: 39,442


cppprogrammer (4/8/2013) My only feedback is I'm a big fan of sticking to integer arithmetic where possible so a few neat tricks there!
Me too! I knew it was going to be lightning quick when I first saw it just because of the Integer Math in it. "tclausen.dk" did a heck of a job on this one. Here's his link again (look for his second post on the thread). Let's get everyone to stop over there and lets see if we can drive his post over the 5,000 mark. The man definitely deserves it for this one! http://stackoverflow.com/questions/7330711/isoweekinsqlserver2005
Jeff Moden "RBAR is pronounced "reebar" and is a "Modenism" for "RowByAgonizingRow".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
Helpful Links: How to post code problems How to post performance problems




SSCrazy
Group: General Forum Members
Last Login: Tuesday, April 14, 2015 6:45 AM
Points: 2,403,
Visits: 3,431


This is one excellent algorithm to get the ISO week number. However doing this by using 17530101 instead of 19000101 throws an error
Arithmetic overflow error converting expression to data type datetime.
It turns out the highest integer value "DATEPART(DAYOFYEAR" can accept 2958463. Which is 8100 years, which accidentally is the number of years between 1900 and 9999 and number of days between 19000101 and 99991231. My guess is that a developer over at Microsoft has hardwired this upper limit.
N 56°04'39.16" E 12°55'05.25"




SSCrazy
Group: General Forum Members
Last Login: Tuesday, April 14, 2015 6:45 AM
Points: 2,403,
Visits: 3,431


However, the fix is really simple. Since all we need in an anchor date of a monday, write this case statement.
===== Test the new formula ============================================================ DECLARE @BitBucket INT; SELECT @BitBucket = CASE WHEN Date < '19000101' THEN DATEPART(dy,DATEDIFF(dd,'17530101',Date)/7*7+3)+6 ELSE DATEPART(dy,DATEDIFF(dd,'19000101',Date)/7*7+3)+6 end / 7 FROM #TestTable; GO 5
N 56°04'39.16" E 12°55'05.25"




SSCForever
Group: General Forum Members
Last Login: Today @ 7:08 PM
Points: 42,059,
Visits: 39,442


SwePeso (4/8/2013) This is one excellent algorithm to get the ISO week number. However doing this by using 17530101 instead of 19000101 throws an error
Arithmetic overflow error converting expression to data type datetime.
It turns out the highest integer value "DATEPART(DAYOFYEAR" can accept 2958463. Which is 8100 years, which accidentally is the number of years between 1900 and 9999 and number of days between 19000101 and 99991231. My guess is that a developer over at Microsoft has hardwired this upper limit.
Too funny and brilliant observation, Peter. Your CASE statement fix works great especially since I would imagine that most folks would encapsulate the formula in one form or another of a function.
Your fix for the earlier date does have me thinking about Integer Math and conversions, though. I don't know why, but I've never tested to see if the use of Date Serial Numbers such as 0 ('19000101') and 53690 ('17530101') are faster than their string counter parts as we use them in some of the date functions. We do know that CAST and CONVERT to strings and back again is slower but I've never tested the implicit conversions. I'll give it a whirl when I get home from work tonight.
Thanks for stopping by, Peter. Haven't seen you around much and it's a real pleasure to see that fabulous mind at work here, again.
Jeff Moden "RBAR is pronounced "reebar" and is a "Modenism" for "RowByAgonizingRow".
First step towards the paradigm shift of writing Set Based code: Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."
Helpful Links: How to post code problems How to post performance problems




SSCertifiable
Group: Moderators
Last Login: Today @ 8:46 AM
Points: 7,062,
Visits: 2,662




