In SQL Server 2008 the isoweek can be found with this:
SELECT datepart(iso_week, getdate())
Before SQL Server 2008 there were no built-in function to find isoweek.
I have been searching high and low for a good syntax to find a userdefined iso_week for SQL Server 2005. I found quite a few solutions. Didn’t like any of the solutions I found, most of them didn’t work, and they were way too long.
Since the issue is very old, I would expect this issue is depleted and the best solution has been found. I was unable to find a good method though.
I wrote a solution, which I am going to post later. But before I do, I want to make absolutely sure that no one else can match the solution I wrote.
I am hoping to earn the self-learner badge. I urge people to find the best answers out there for this ancient question.
I am going to post my answer after giving people a chance of finding a good solution.
Here’s an approach that is similar to yours in that it also relies on this week’s Thursday. But in the end it uses the date differently.
Get the date of this (ISO) week’s Thursday.
Your own solution uses the hard coded date of a known Thursday. Alternatively, this week’s Thursday could be found with the help of
@@DATEFIRST:(I wasn’t struggling too much for the right formula because it was already known to me.)
Get the Thursday’s day of year:
Use the number to find out the week like this:
Here are the above calculations in a single statement: