SQL Server

SQL Serverで指定した日付が休日(祝祭日、土日)かどうかをチェックするユーザー定義関数を作ったので覚書しておく。

「Access VBA:指定した日付が休日(祝祭日、土日)かどうかをチェックするユーザー定義関数」のSQL Server版。
スポンサードリンク


ユーザー定義関数の処理概要

作成したユーザー定義関数の処理の概要について以下に記載します。

ユーザー定義関数のプログラムだけでは祝祭日のチェックはできないので、別途祝祭日を管理するテーブル(holidayテーブル)を用意して事前に祝祭日の日付を入力しておく必要があります。

祝祭日、土日以外で会社がお休みになる日(創立記念日など)も入力しておいてください。

祝祭日がテーブルに入力されていることを前提として、ユーザー定義関数のプログラム処理としては以下のとおりです。

  1. 休日かどうかチェックしたい日付を引数として受け取ります。

  2. 受け取った引数の日付がholidayテーブルに存在するかをチェックします。

  3. 存在しない場合は、曜日を調べて土日かどうかをチェックします。

  4. 祝祭日もしくは、土日にあたる場合はTrueを返し、そうでない場合はFalseを返します。

祝祭日を管理するテーブルの構造

祝祭日を管理するテーブル構造は以下のとおり。

テーブル名:holiday
フィールド名 データ型 入力する値
holiday datetime 祝祭日の日付
holiday_name varchar(20) 祝祭日名

注意点

holiday_nameフィールドを用意するかどうかは任意です。

祝祭日名については直接使われることはありません。

ユーザー定義関数を作成するスクリプト

以下、ユーザー定義関数を作成するスクリプト
/*USE [ユーザー定義関数を作成するDB名] に変更すること!*/
USE [test_db]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[ChecKHoliday] 
( 
    @dt DATETIME
) 
RETURNS int 
AS 
BEGIN 
    DECLARE @checkdt datetime
	DECLARE @flg int
	
	/*時刻を含むデータが指定される場合を考慮して日付部分だけにする(時間を00:00:00)*/
	set @dt = cast(CONVERT(char(10), @dt, 23) as datetime)

	/*フラグ初期化*/
	set @flg = 0

	/*引数の日付が祝祭日テーブル(holiday)にあるかどうかチェック*/
	set @checkdt = (select holiday from holiday where holiday=@dt)
	
	/*Nullであれば祝祭日テーブルには登録されていない日付なので祝祭日ではない*/
	if @checkdt is null
		begin
			/*次に土日かどうかチェック(1-日曜日,7-土曜日)*/
			if datepart(weekday,@dt)=1 or datepart(weekday,@dt)=7
				set @flg = 1
		end

	/*祝祭日*/
	else
		begin
			set @flg = 1
		end

	RETURN @flg
		
    
END

上記スクリプトをSQL Serverで実行してあげればユーザー定義関数が作成されます。

スポンサードリンク

  

関連記事