查找月中星期几的迭代

pmd*_*dci 3 sql-server t-sql sql-server-2016

我有一个日期维度表,我需要在其中添加一个新列,在该列中定义一个月内一周中某天的迭代(第二个周一/周二/周三/周四/周五/周六/周日等为 2) .

是否可以仅在表格的日期列(“日期”类型)上进行计算?

Phi*_*lᵀᴹ 6

使用它实际上非常容易DAY(),因为 1-7 将是 1,8-14 将是 2,15-21 将是 3,22-28 将是 4,29-31 将是 5。不管名称是什么总有一天,这将永远成立。

select case when DAY(yourdate) <=7  then 1
            when DAY(yourdate) <=14 then 2
            when DAY(yourdate) <=21 then 3
            when DAY(yourdate) <=28 then 4
            else 5
        end as occurance
from yourtable; 
Run Code Online (Sandbox Code Playgroud)

case短路)


And*_*y M 5

或者,您可以使用公式计算结果:

SELECT
  (DAY(YourDate) + 6) / 7 AS Iteration
FROM
  dbo.YourTable
;
Run Code Online (Sandbox Code Playgroud)

在除法运算的两个操作数都是整数的情况下,结果也是整数,并且是向下舍入的整数。

所以,DAY(YourDate)= 1 会给你 1,因为

(1 + 6) / 7 = 7 / 7 = 1
Run Code Online (Sandbox Code Playgroud)

A 2 将产生

 (2 + 6) / 7 = 8 / 7 = 1
Run Code Online (Sandbox Code Playgroud)

– 再次 1。

如果是 7,你仍然得到 1:

(7 + 6) / 7 = 13 / 7 = 1
Run Code Online (Sandbox Code Playgroud)

但是 8 将导致 2:

(8 + 6) / 7 = 14 / 7 = 2
Run Code Online (Sandbox Code Playgroud)

等等。