SQL中的每月一周

时间:2016-10-31 11:36:43

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

DECLARE @date DATETIME= GETDATE()

SELECT  DATEDIFF(WEEK,
                 DATEADD(WEEK,
                         DATEDIFF(WEEK, 0,
                                  DATEADD(MONTH, DATEDIFF(MONTH, 0, @date), 0)),
                         0), @date - 1) + 1

0作为datediff()函数中的参数的目的是什么?

2 个答案:

答案 0 :(得分:1)

您问题的具体答案是0只是获得月初的一种方式:

dateadd(month, datediff(month, 0, @date), 0)

这是在SQL Server中执行此操作的一种方法,因为它不提供“日期截断”功能。我更喜欢:

dateadd(day, 1 - day(@date), @date)

(尽管如果@date有时间成分,这可能会有点复杂。)

然而,更简单的方法是:

select (day(@date) - 1) / 7) as week_of_month

答案 1 :(得分:0)

以下获取参考点的月数

datediff(month, 0, @date)

然后它用于将参考日期添加回到达该月的第一天

DATEADD(月,         datediff(月,0,@日期),         0)

因此,它用于查找当月的第一天

声明@date datetime = getdate()

select 
    getdate(),
    datediff(month, 0, @date),
    dateadd(month, 
            datediff(month, 0, @date),
            0)

enter image description here