こんにちは、私は4つの列id、name、start_date、end_dateのテーブルを持っています。日付句との比較のSQLクエリ
以下は、テーブルから行を取得しようとしたストアドプロシージャです。
Iの値(活性のための1、非アクティブ、およびヌル2)
Alter procedure dbo.GetName(@id int, @statusDate VARCHAR(50))
begin
select id, name from customer
where id = @id
AND ((@statusDate = 1 AND GETDATE() BETWEEN start_date AND end_date)
OR (@statusDate = 2 AND GETDATE() BETWEEN start_date AND end_date)
OR @statusDate IS NULL)
end
@statusDateが1である場合、条件は
- あるを有するであろうパラメータとして@statusを通過します開始日と終了日の間に今日ある行を取得する
- @statusDateが2の場合は、開始日と終了日の間に日付がない行を取得する
- @statusDateがnullの場合、すべての行
を取得し、それが上記の条件に基づいて行が
:yyouパフォーマンスの問題が発生して起動した場合ので、(この構文は、Microsoft SQL Serverの場合)のように、あなたは、条件付きブロックを使用することをお勧めしますか?彼らに何が間違っていますか? – StevieG
将来の日付としてstart_dateとend_dateを持つサンプル行を追加しました。 @statusDateを1として渡してクエリを実行すると、まだ行が取得されます。 – user982129