永久设置datefirst

时间:2012-12-12 16:45:29

标签: sql sql-server sql-server-2008 tsql

我想永久更改DATEFIRST的值(用于 DATEPART 等功能)

如果我这样做:SET DATEFIRST 1值在执行期间保持它会在执行后返回默认值 - 7 -

我已经遇到了问题,我知道这与登录的国家有关,但是我忘记了哪个表格&我必须改变哪个属性。

3 个答案:

答案 0 :(得分:1)

我必须说这对我进行了一些研究。看看以下查询。您会注意到datefirst字段。我认为在这个级别上,随着语言设置的改变,会产生各种权限影响。

SELECT
    *
FROM
    sys.syslanguages

我没有服务器,我现在可以对此进行测试,但我想通过set语句可以将datefirst列设置为您想要的任何内容。

测试测试测试,因为这将对你试图解决的问题产生巨大的影响。

Interesting Resource # 1

Interesting Resource # 2

Interesting Resource # 3

答案 1 :(得分:1)

您可以使用Microsoft SQL Server Management Studio或执行以下示例t-sql脚本来更改在SQL Server上进行身份验证的sql登录或Windows用户的默认语言:

USE [master]
GO
ALTER LOGIN [login] WITH DEFAULT_LANGUAGE = [you_language]
GO

The script was taken from this site

答案 2 :(得分:1)

参加聚会可能有点晚了,但是这里有一种方式来攻击#34; hack"它,无论datefirst值,在实际想要它的第一天,设置为服务器,db,登录或会话和参数化(WOW,之前从未使用过这个词):

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。 :也许你曾经需要的唯一情况是函数或约束(可能是计算列),其中不允许SET操作。如果允许SET,请在需要时设置它并忘记它。