如何在SQL Server中将星期一设置为星期的第一天

Cli*_*r87 14 sql-server dayofweek sql-server-2008

我在具有区域设置的计算机上运行SQL Server 2008,该区域设置将星期一作为一周的第一天.如果我在表中创建一个计算列来计算日期字段的星期几,那么我得到2表示星期一而不是1.

是否需要设置表或数据库或服务器的某些属性?

Sam*_*Sam 25

一周的第一天基于服务器的语言设置.us_english的默认设置是7(星期日)

您可以使用,找到当前的第一天 SELECT @@DATEFIRST


但是,您可以使用DATEFIRST此功能.只需将其放在查询的顶部即可

SET DATEFIRST 1; 这将星期一设置为当前连接的一周的第一天.

http://technet.microsoft.com/en-us/library/ms181598.aspx


Min*_*yen 8

您可以使用DATEPART(dw, GETDATE())但请注意,结果将取决于 SQL 服务器设置@@DATEFIRST值,即一周中的第一天设置(在欧洲,默认值 7 为星期日)。

另一种方法是明确指定一周中的第一天值作为参数并避免依赖于@@DATEFIRST设置。您可以在需要时使用以下公式来实现:

(DATEPART(dw, GETDATE()) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1
Run Code Online (Sandbox Code Playgroud)

@WeekStartDay您希望系统每周的第一天在哪里(从 1 到 7,这意味着从周一到周日)。

我将它包装到下面的函数中,以便我们可以轻松地重用它:

CREATE FUNCTION [dbo].[GetDayInWeek](@InputDateTime DATETIME, @WeekStartDay INT)
RETURNS INT
AS
BEGIN
    --Note: @WeekStartDay is number from [1 - 7] which is from Monday to Sunday
    RETURN (DATEPART(dw, @InputDateTime) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1 
END
Run Code Online (Sandbox Code Playgroud)

用法示例: GetDayInWeek('2019-02-04 00:00:00', 1)

它等效于以下(但独立于 DATEFIRST 设置):

SET DATEFIRST 1
DATEPART(dw, '2019-02-04 00:00:00')
Run Code Online (Sandbox Code Playgroud)

  • 很好的方法,因为它完全消除了对系统 DATEFIRST 值的依赖。 (3认同)

Cod*_*der 7

只需在查询中设置

SET DATEFIRST 1;

值一周的第一天是1星期一2星期二3星期三4星期四5星期五6星期六7(默认,美国英语)星期日