我想永久更改 DATEFIRST 的值(用于DATEPART 之类的函数)
如果我这样做:SET DATEFIRST 1
该值在执行期间保持不变,但在执行后返回默认值 - 此处为 7
我已经遇到了问题,我知道它与登录的国家/地区有关,但我忘记了我必须更改哪个表和哪个属性。
我想永久更改 DATEFIRST 的值(用于DATEPART 之类的函数)
如果我这样做:SET DATEFIRST 1
该值在执行期间保持不变,但在执行后返回默认值 - 此处为 7
我已经遇到了问题,我知道它与登录的国家/地区有关,但我忘记了我必须更改哪个表和哪个属性。
您可以使用 Microsoft SQL Server Management Studio 或执行以下示例 t-sql 脚本来更改在 SQL Server 上通过身份验证的 sql 登录或 windows 用户的默认语言:
USE [master]
GO
ALTER LOGIN [login] WITH DEFAULT_LANGUAGE = [you_language]
GO
派对可能有点晚了,但这是一种“破解”它的方法,无论 datefirst 值如何,设置为服务器、数据库、登录或会话,并且在第一天之前可参数化(哇,以前从未使用过这个词)你实际希望它是:
declare
/*
Let's say for a regular, boring day of Monday
, regarldess of the datefirst value, I want it to return Monday as 1 (first day of week)
*/
@ForDate datetime = '20170320',
-- you can play with any value here
@SetDateFirstValue int = 5
--this is only for testing
set datefirst @SetDateFirstValue;
select
datepart(dw,@ForDate) as ActualReturnedDayOfWeek
, datepart(dw,dateadd(dd, @@DATEFIRST - 1,@ForDate)) As IWantItThisWay
P.S. : Perhaps the only situations you'll ever need this, is in a function or constraint (computed columns maybe) where SET
operations are not allowed. If SET
is allowed, SET it as you need it and forget about it.