Sql server 使用day字段生成周末前星期五的数据提取

Sql server 使用day字段生成周末前星期五的数据提取,sql-server,tsql,reporting-services,formula,Sql Server,Tsql,Reporting Services,Formula,正在SQL Server上使用TSQL 我需要在数据库中使用只保存天数的发薪日列生成摘录,例如26,生成每月26日的摘录,如果该发薪日在周末,则该摘录的数据应在周末前的周五提取 有没有人尝试过这一点,并且能够通过TSQL提供一些实现这一点的方法 谢谢我假设您也有可用的月份和年份,在这种情况下,您可以构造一个真实的日期,并从星期日开始将星期几作为一个基于1的数字。所以,6等于星期五。这将为今天生成5,因为星期四=5 SELECT DATEPART(dw, DATEFROMPARTS(2018, 0

正在SQL Server上使用TSQL

我需要在数据库中使用只保存天数的发薪日列生成摘录,例如26,生成每月26日的摘录,如果该发薪日在周末,则该摘录的数据应在周末前的周五提取

有没有人尝试过这一点,并且能够通过TSQL提供一些实现这一点的方法


谢谢

我假设您也有可用的月份和年份,在这种情况下,您可以构造一个真实的日期,并从星期日开始将星期几作为一个基于1的数字。所以,6等于星期五。这将为今天生成5,因为星期四=5

SELECT DATEPART(dw, DATEFROMPARTS(2018, 07, 26)) AS [DayOfWeek]
编辑: 我将做另一个假设,这一次这是可能的,就像它总是在当前月份运行一样。这有点狡猾,因为如果运行得太早或太迟,一切都会崩溃,但至少是可以实现的

SELECT  DATEPART(dw, DATEFROMPARTS(
    DATEPART(YEAR, GETDATE()), 
    DATEPART(MONTH, GETDATE()), 
    26)) AS [DayOfWeekThisMonth]
编辑2: 好的,根据我们本月的工作,我们可以做到:

DECLARE @PayDayNumber INT = 29; -- Replace this with a SELECT to get your value
SELECT CASE(DATEPART(dw, DATEFROMPARTS(DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), @PayDayNumber)))
            WHEN 1 THEN @PayDayNumber - 2 
            WHEN 7 THEN @PayDayNumber - 1
            ELSE @PayDayNumber
            END AS [WeekendSafePayDay]

本月(2018年8月)第29位将返回第29位。您可以将9的
DATEPART(MONTH,GETDATE())
更改为test septer,返回28,因为9月29日是星期六;或者将其更改为test July,返回27,因为7月29日是星期日。

您在上面的评论中说过,您假设的是当前月份

首先将您的发薪日编号转换为正确的日期:

select dateadd(month,((year(getdate())-1900)*12)+month(getdate())-1,payday-1)
  as paydate
然后对其使用案例陈述:

case datename(weekday,paydate)
  when 'Saturday' then dateadd(day,-1,paydate)
  when 'Sunday' then dateadd(day,-2,paydate)
  else paydate
  end as paydateadjust

(显然,这些需要重写为一个正确的SQL语句。日期公式借用了Michael Valentine Jones的超级有用的SQL Server日期函数。)

不,我只有带两位数的“发薪日”字段,没有其他日期字段。我想报告前一个星期五周末的“发薪日”。我可以创建自己的带有日期的表格吗?那么我不知道你怎么可能做到这一点。7月26日是星期四,8月26日是星期天。如果没有这个月,就不可能知道它将是哪个月。这个逻辑有帮助吗?F=获取星期五的日期(天)M=使用F,设置星期一的日期(M=F+3)检查UC日期是否为0,如果为真/是,将data_标志设置为“N”,否则检查UC日期是否在F&M之间如果为真/是,设置用于提取数据的标志,并使用tenaltkey提取周末结束时的UC数据我已进行了另一次编辑。这能满足您的需求吗?您是否总是在当月运行此功能?否则,我看不出任何逻辑是如何预测您运行它的月份的。嗨,是的,这将是当前月份的。该报告将于周一至周五发布,接下来几天的任何数据都需要在周五发布。