从当前日期开始的3个月之前获取不包括周末和空值的SQL日期

时间:2018-10-26 09:22:32

标签: sql sql-server

我的表包含

( D1 datetime,d2 datetime,....,d31 datetime,H1 int,h2 int,.. h31 int )

D1-月1日,H1-小时

在这里,我想获取小时数为<= 0的日期,并且日期不应该是星期日或星期六,这应该是过去3个月的时间。

我试图获取过去3个月的所有星期日和星期六列表,并检查该列表,但这无济于事。

请先帮助我,

1 个答案:

答案 0 :(得分:0)

这是您要寻找的吗?

select v.*
from t cross apply
     (values (d1, h1), (d2, h2), . . . 
     ) v(d, h)
where v.d >= dateadd(month, -3, getdate()) and  -- last three months
      datename(weekday, v.d) not in ('Saturday', 'Sunday') and
      v.h < 0;

cross apply被用于取消数据透视。这表明您的数据结构确实很糟糕。列中的数据应位于单独的行中。