4

我想永久更改 DATEFIRST 的值(用于DATEPART 之类的函数)

如果我这样做:SET DATEFIRST 1该值在执行期间保持不变,在执行后返回默认值 - 此处为 7

我已经遇到了问题,我知道它与登录的国家/地区有关,但我忘记了我必须更改哪个表和哪个属性。

4

3 回答 3

2

我必须说这需要我进行一些研究。看看下面的查询。您会注意到 datefirst 字段。我想在这个级别更改语言设置会产生各种权限影响。

SELECT
    *
FROM
    sys.syslanguages

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

TEST TEST TEST 因为这将对您试图解决的问题产生巨大的影响。

有趣的资源#1

有趣的资源#2

有趣的资源#3

于 2012-12-13T22:34:59.083 回答
1

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

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

脚本取自此站点

于 2016-06-10T05:35:57.403 回答
1

派对可能有点晚了,但这是一种“破解”它的方法,无论 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.

于 2017-03-20T13:15:06.697 回答