- Home
- SQL Server
- [SQL Server]日付の範囲指定(開始日・終了日にブランク対応)
開始日と終了日にブランクを設定した場合の記述にも対応
日付の範囲指定
日付の範囲指定は、「BETWEEN」や「<=」「>=」などを使用するが、開始日と終了日にブランクを設定した場合の記述を以下に記す。
1.開始日にブランク:終了日以前の日付のデータを取得
2.終了日にブランク:開始日以降の日付のデータを取得
3.開始日・終了日共にブランク:全ての日付のデータを取得
「<=」「>=」(不等号)を使用した記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
DECLARE @DateFrom varchar(max) = '1998/01/01' DECLARE @DateTo varchar(max) = '' DECLARE @table table ( name varchar(20), birthday datetime ) INSERT INTO @table VALUES ('山田','2017/05/08') INSERT INTO @table VALUES ('山本','1999/07/14') INSERT INTO @table VALUES ('山岸','1984/01/01') SELECT name AS 名前, birthday AS 誕生日 FROM @table WHERE 0=0 AND FORMAT(birthday,'yyyy/MM/dd') >= (CASE WHEN @DateFrom = '' THEN '1900/01/01' ELSE @DateFrom END) AND FORMAT(birthday,'yyyy/MM/dd') <= (CASE WHEN @DateTo = '' THEN '9999/12/31' ELSE @DateTo END) |
BETWEENを使用した記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
DECLARE @DateFrom varchar(max) = '1990/01/01' DECLARE @DateTo varchar(max) = '' DECLARE @table table ( name varchar(20), birthday datetime ) INSERT INTO @table VALUES ('山田','2017/05/08') INSERT INTO @table VALUES ('山本','1999/07/14') INSERT INTO @table VALUES ('山岸','1984/01/01') SELECT name AS 名前, birthday AS 誕生日 FROM @table WHERE 0=0 AND FORMAT(birthday,'yyyy/MM/dd') BETWEEN (CASE WHEN @DateFrom = '' THEN '1900/01/01' ELSE @DateFrom END) AND (CASE WHEN @DateTo = '' THEN '9999/12/31' ELSE @DateTo END) |
CASE~WHEN~ENDは値を返す
WHEN直後の条件を評価し、条件が成立するならば、THEN直後の値を返す。
条件が成立しないならばELSE直後の値を返す。
なので例えば
「AAA BETWEEN (CASE~END) AND (CASE~END)」は
「AAA BETWEEN ‘XXX’ AND ‘PPP’」に置き換えられる。
※CASE~ENDは、分かりやすくするためにカッコで括っているが、特に必要ではない。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。