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

上記のコードが機能しないため、トランザクションが 1 日の 23:30 から翌日の 6:30 までの間であるかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

1

ここで変更するANDだけOR...

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

これは、両方の条件が一緒に true になる可能性がないためです...リクエストを見ると、条件のいずれかが true になったときに true を返す必要があり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 に答える