微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果您超过日期,如何获取NextDayofWeek?

如何解决如果您超过日期,如何获取NextDayofWeek?

| 这是我想要做的。我将以下代码更改为带有两个参数@startdate和@transactionDate的SP,它将返回NextTransactiondate。逻辑是@startdate确定它是星期几。 @NexttransactionDate应该等于交易日期的第二天。因此在此示例中,开始日期为星期三,因此下一个交易日期应为-2011-05-04 \'。在下面的代码中,它始终在星期五进行计算,但是应该根据日期进行动态计算。任何帮助表示赞赏吗?
declare @TransactionDate datetime
declare @startDate datetime
declare @startDay int
declare @NextTransactionDate datetime
--Monday
set @TransactionDate = \'2011-05-02\'
--Wednesday
set @startDate = \'2011-04-27\'
set @startDay = datepart(dw,@startDate)

set @NextTransactionDate= DATEADD(DAY,(CASE DATEPART(DW,@TransactionDate)
   WHEN 7 THEN 6  
   WHEN 6 THEN 7  
    ELSE 6 - DATEPART(DW,@TransactionDate)
  END),@TransactionDate);  

print @NextTransactionDate
    

解决方法

以下对我有用:
declare @TransactionDate DATETIME
DECLARE @TransactionDay tinyint
declare @startDate datetime
declare @startDay int
declare @NextTransactionDate datetime
--Monday
set @TransactionDate = \'2011-05-05\'
SET @TransactionDay = DATEPART(dw,@TransactionDate)
--Wednesday
set @startDate = \'2011-04-27\'
set @startDay = datepart(dw,@startDate)



set @NextTransactionDate= DATEADD(DAY,((@startDay - @TransactionDay) + 7) % 7,@TransactionDate);  

select @startDay,DATEPART(dw,@NextTransactionDate),@NextTransactionDate
为了解释它的实质,我发现了startDate和transactionDate在一周中的不同之处。我在上面加上14,因为负数模为正数会产生负数,这会使您的下一个交易日期过去(并且您不希望这样)。最坏的情况是@startDay为1且@TransactionDay为7时,其差值为-6。加7可以确保该差异为正,但仍与n mod 7环中的实际差异在同等的类中(对不起,我有点数学呆子)。     ,尝试这个:
declare @TransactionDate datetime 
declare @startDate datetime 
declare @startDay int 
declare @transactionDay int 
declare @NextTransactionDate datetime 
declare @daysToAdd int

--Monday 
set @TransactionDate = \'2011-05-02\' 
set @transactionDay = datepart(dw,@TransactionDate)  

--Wednesday 
set @startDate = \'2011-04-27\' 
set @startDay = datepart(dw,@startDate)  

print @transactionDay
print @startDay

if(@startDay <= @transactionDay)
    set @daysToAdd = (@startDay + 7) - @transactionDay
else
   set @daysToAdd = @startDay - @transactionDay

set @NextTransactionDate = Dateadd(Day,@daysToAdd,@TransactionDate)
print @NextTransactionDate
    ,我不确定我是否遵循您的意思。我认为您是说下一个@TransactionDate应该是@startDate发生在一周中的下一天。 如果是这样,您可以尝试:
declare @tDay = datepart(w,@transactionDate)

set @NextTransactionDate = DATEADD(w,@startDay-@tDay,@TransactionDate);
我不确定您对6和7的处理方式是什么...您是否要确保新的@TransactionDate不是周末?如果是这样,则需要对其稍作修改...     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。