2

SQL で between を使用する代わりに、greater than equal to と less than equal to を使用する方法

SQLで日付変数をチェックしています

私はこのようにしてみました。

Date between coalesce(@fromDate,Date) and coalesce(@toDate,Date) 

ただし、ユーザーが日付 (fromDate または toDate) のいずれも入力しない場合

上記の条件を変換する必要があるようにgreater than equal to and less than equal to

SQLの構文で助けてください。ありがとう

4

4 に答える 4

3
IF @fromDate IS NULL
  BEGIN
    SET @fromDate = '1900-01-01';
  END;

IF @toDate IS NULL
  BEGIN
    SET @toDate = '2099-01-01';
  END;

SELECT things
FROM   table
WHERE  date_field BETWEEN @toDate AND @fromDate;

このコードは本質的に、妥当なパフォーマンスを提供し、すべての結果を返す必要があるチェックする任意の大きな範囲を提供します (どちらの値も指定されていない場合にそれが必要であると仮定します)。

このコードは次のように短縮できます。

SELECT things
FROM   table
WHERE  date_field BETWEEN Coalesce(@toDate, '1900-01-01') AND Coalesce(@fromDate, '2099-01-01');

しかし、説明のために詳細バージョンを保持しました。

于 2013-09-16T09:43:59.020 に答える
1
SELECT *
FROM dbo.Account AS a
WHERE 1 = 1
    AND (
        @toDate IS NULL
        OR a.CreateDate <= @toDate
    )
    AND (
        @fromDate IS NULL
        OR a.CreateDate >= @fromDate
    )

1 = 1 は条件を明確にするためだけのものであり、決して必要ではないことに注意してください。

于 2013-09-16T09:47:15.570 に答える