0

我想检查交易是否发生在一天的 23:30 到第二天的 6:30 之间。

我正在使用以下代码。

DECLARE @StartTime TIME
DECLARE @EndTime TIME
DECLARE @TrxnDateTime TIME
   select @TrxnDateTime= CONVERT(Varchar(15),Cast(dtTrxnDateTime as time))
   from tbl1 where iTransactionId = 1
SET @EndTime='6:00'
SET @StartTime='23:30'
SET @TrxnDateTime='3:30'


PRINT @StartTime
PRINT @EndTime
PRINT @TrxnDateTime

IF(@TrxnDateTime > @StartTime AND @TrxnDateTime < @EndTime)
    BEGIN
        PRINT 'Working'
    END
ELSE
    BEGIN
        PRINT 'Rule Not Tripped'
    END

由于上面的代码不起作用,我如何检查交易是否在一天的 23:30 到第二天的 6:30 之间?

4

3 回答 3

1

只需在此处更改AND...OR

IF(@TrxnDateTime > @StartTime OR @TrxnDateTime< @EndTime)

之所以如此,是因为这两种条件都不可能在此处变为真...查看您的请求,当您的任何条件变为真时,它都应该返回真......所以使用OR而不是AND.

于 2013-05-08T10:45:05.153 回答
0

取决于动态创建的变量@TrxnDate 条件

DECLARE @StartTime DATETIME
DECLARE @EndTime DATETIME
DECLARE @TrxnDate DATE
SET @StartTime = '23:30:00'
SET @EndTime = '06:30:00'
SET @TrxnDate = '20130508'

IF EXISTS (
           SELECT 1
           FROM tbl1
           WHERE iTransactionId = 1
             AND dtTrxnDateTime > DATEADD(DAY, DATEDIFF(DAY, 0, @TrxnDate) - 1, @StartTime)
             AND dtTrxnDateTime < DATEADD(DAY, DATEDIFF(DAY, 0, @TrxnDate) + 1, @EndTime)
           )
BEGIN
  PRINT 'Working'
END
ELSE
BEGIN
  PRINT 'Rule Not Tripped'
END

SQLFiddle上的演示

于 2013-05-08T10:53:41.287 回答
0
DECLARE @StartTime Datetime
DECLARE @EndTime Datetime
DECLARE @TrxnDateTime Datetime
   select @TrxnDateTime= CONVERT(Varchar(15),Cast(dtTrxnDateTime as Datetime))  from tbl1 where iTransactionId = 1

-- I guess you are getting @TrxnDateTime from DB, so you dont need to set it

   SET @EndTime='2013-05-08 06:00:00.000'
   SET @StartTime='2013-05-07 23:30:00.000'



PRINT @StartTime
PRINT @EndTime
PRINT @TrxnDateTime

IF(@TrxnDateTime > @StartTime AND @TrxnDateTime< @EndTime)

   BEGIN
PRINT 'Working'
END
ELSE
   BEGIN
PRINT 'Rule Not Tripped'
   END
于 2013-05-08T10:46:46.203 回答