pmd*_*dci 3 sql-server t-sql sql-server-2016
我有一个日期维度表,我需要在其中添加一个新列,在该列中定义一个月内一周中某天的迭代(第二个周一/周二/周三/周四/周五/周六/周日等为 2) .
是否可以仅在表格的日期列(“日期”类型)上进行计算?
使用它实际上非常容易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
短路)
或者,您可以使用公式计算结果:
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)
等等。
归档时间: |
|
查看次数: |
1171 次 |
最近记录: |