I'm using SS 2005 if that
I've seen sample code like
DECLARE @restore = SELECT @@DATEFIRST
SET DATEFIRST 1
SELECT datepart(dw,ADateTimeColumn) as MondayBasedDate,.... FROM famousShipwrecks --
SET DATEFIRST @restore
Suppose while the query is running another query sets DATEFIRST?
If another query relies on datefirst being 7 (for example) and doesn't set it, and runs while my query is running, that's his problem for not setting it? or is there a better way to write queries that depend on a given day being day number 1.
4条答案
按热度按时间xyhw6mcr1#
@@DATEFIRST is local to your session. You can verify it by opening to tabs in Sql Server Management Studio (SSMS). Execute this code in the first tab:
And verify that it doesn't affect the other tab with:
See this MSDN article .
g6ll5ycj2#
You can forget about
DATEPART(weekday, DateColumn)
and@@DATEFIRST
and instead calculate the day of the week yourself.For Monday based weeks (Europe) simplest is:
For Sunday based weeks (America) use:
This works fine ever since January 1st respectively 7th, 1753.
8wigbo563#
Just an additional point, if you want to avoid setting DATEFIRST you can just incorporate the value of DATEFIRST in your query to find your required day as :
Then you dont need to worry about restoring it at all!
vptzau2j4#
To setup a parameterized first day of the week, the following should work