我在存储过程中有一个 if 语句,用于派生一些时间值。它看起来像这样:
DECLARE @foo TIME
IF (SELECT CONVERT(TIME,SYSUTCDATETIME())) > '15:00'
SET @foo = DATEADD(hh,-15,CONVERT(TIME,SYSUTCDATETIME()))
ELSE
SET @foo = DATEADD(hh,+9,CONVERT(TIME,SYSUTCDATETIME()))
稍后我想在以下 WHERE 子句中使用该值:
AND created_at > DATEADD(hh,-@DailyLimitOffsetTime, CONVERT(TIME,SYSUTCDATETIME()))
我不断收到一个错误,即数据类型时间对于减号运算符无效。我怎样才能解决这个问题以使 and 子句起作用。我已经尝试转换数据类型,并且我有点理解 DATEADD(hh) 正在寻找参数 2 是 int 而不是时间的问题。有没有更简单的方法可以做到这一点,我必须承认,如果你不能告诉我我根本不擅长时间戳。任何帮助表示赞赏。
DECLARE @DailyLimitOffsetTime TIME
IF (SELECT CONVERT(TIME,SYSUTCDATETIME())) > '15:00'
SET @DailyLimitOffsetTime = DATEADD(hh,-15,CONVERT(TIME,SYSUTCDATETIME()))
ELSE
SET @DailyLimitOffsetTime = DATEADD(hh,+9,CONVERT(TIME,SYSUTCDATETIME()))
IF @Limit <=
(
SELECT COUNT(*)
FROM dbo.fooTable
WHERE offerId = @OfferID
AND created_at >
DATEADD(hh,DATEPART(hh,-@DailyLimitOffsetTime),CONVERT(TIME,SYSUTCDATETIME()))
)
SET @ErrorTypeID = 9400
我相信有更好的方法可以做到这一点,如果是这样,请分享。一如既往地感谢任何帮助。如果您需要有关此问题的任何进一步解释,请告诉我。这个有点乱