T-SQL - WHILE の使い方
T-SQL の WHILE の使い方
今回は T-SQL でループしたい時に便利な WHILE の使い方を見てみましょう。
WHILE
WHILE を使うと、指定した条件文が TRUE を返す間、ステートメントやステートメントブロックを繰り返すことができます。
途中でループを抜けたい時には BREAK を使って抜けることができます。
途中で続きのステートメントを実行せず WHILE の条件チェックに戻りたい時には CONTINUE を使います。
構文は次の通りです。
WHILE [ 条件文 ] BEGIN [ 繰り返したいステートメントブロック / BREAK / CONTINUE ] END
条件のチェックは最初に行われるので、条件が最初から FALSE になる時は一度も実行されません。
繰り返したいものがステートメントひとつだけの場合は BEGIN END はなくても大丈夫なのですが、わかりやすいので私は常に書くようにしています。
それでは、WHILE を実際に使ってみましょう。
WHILE を使って、2020-01-01 から 2020-01-15 の日付のうち、土日以外の日を Print するクエリーは次の通りです。
SET DATEFIRST 1; -- 月曜日を1とする DECLARE @StartDate DATE = '2020-01-01', @EndDate DATE = '2020-01-15'; WHILE @StartDate <= @EndDate BEGIN IF DATEPART(DW, @StartDate) IN (6,7) -- 土・日 BEGIN SET @StartDate = DATEADD(dd, 1, @StartDate); CONTINUE; END PRINT @StartDate; SET @StartDate = DATEADD(dd, 1, @StartDate); END
WHILE の条件文の @StartDate <= @EndDate が TRUE を返す間、BEGIN から END で囲まれた部分が繰り返されます。
SET @StartDate = DATEADD(dd, 1, @StartDate); で @StartDate に 1 日ずつ追加してループしています。
SET DATEFIRST 1 は私の環境が DEFAULT で DATEFIRST 7 なので、DATEPART の dw の結果が月曜日が 1 になるように設定しています。
CONTINUE の前でも日付を追加しないと無限ループになるのでご注意くださいね!