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

T-SQL - WHILE の使い方 1

WHILE の条件文の @StartDate <= @EndDate が TRUE を返す間、BEGIN から END で囲まれた部分が繰り返されます。

SET @StartDate = DATEADD(dd, 1, @StartDate); で @StartDate に 1 日ずつ追加してループしています。

SET DATEFIRST 1 は私の環境が DEFAULT で DATEFIRST 7 なので、DATEPART の dw の結果が月曜日が 1 になるように設定しています。

CONTINUE の前でも日付を追加しないと無限ループになるのでご注意くださいね!

© 2010-2024 SQL Server 入門