如果您超过日期,如何获取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不是周末?如果是这样,则需要对其稍作修改...     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...