永久设置日期第一天

4

我想永久更改 DATEFIRST 的值(该值用于像 DATEPART 这样的函数)。

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

我已经遇到过这个问题,我知道它与登录国家有关,但我忘记了我需要更改哪个表和哪个属性。


请使用ALTER LOGIN命令根据@MartinSmith在评论中的建议设置登录账户的语言。 - stuartd
但我没有看到其他的评论... - Giu
(这是对我已删除的答案的评论) - stuartd
我这样做是因为在 Sql Server 2008 中无法正常工作,你看不到已删除的答案吗? - stuartd
不,也许需要更高的权限。 - Giu
抱歉,我没有意识到这一点:“允许更新” - 此选项仍然存在于sp_configure存储过程中,尽管其功能在SQL Server中不可用。该设置没有任何影响。从SQL Server 2005开始,不支持对系统表的直接更新。 - stuartd
3个回答

2
您可以使用Microsoft SQL Server Management Studio或执行以下示例T-SQL脚本更改在SQL Server上进行身份验证的SQL登录或Windows用户的默认语言:
USE [master]
GO
ALTER LOGIN [login] WITH DEFAULT_LANGUAGE = [you_language]
GO

该脚本来源于此网站


2

我必须说这需要我做一些研究。请看下面的查询语句。您会注意到datefirst字段。我想在此级别更改语言设置可能涉及各种权限问题。

SELECT
    *
FROM
    sys.syslanguages

目前我没有可以测试的服务器,但我想通过set语句,你可以将datefirst列设置为任何你想要的值。

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

有趣的资源#1

有趣的资源#2

有趣的资源#3


1
也许有点晚了,但是这里有一种“黑客”方法,不受日期第一值的限制,可以将其设置为服务器、数据库、登录或会话,并可通过您实际想要的第一天进行参数化(哇,以前从未使用过这个词)。
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,则按照需要设置并忘记它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接