前回の続き
今回は、関数を自作する際の説明をしていきます。
スカラー関数
スカラ―関数とは、単一の値を返してくれる関数であり、例えば同様の処理をたくさんやるときなどに関数定義をしておくと、簡単な構文で実装できることになります。
使い方はこんな感じ
CREATE FUNCTION [関数名] ( [変数] [データ型], [変数] [データ型], [変数] [データ型], ・・・ ) RETURNS [戻値] AS BEGIN --##############-- -- 何らかの処理 --##############-- RETURN [戻値] END
では、さっそくつくってみよう。
今回試してみるのは、年月日を入力したら年度を返してくれる関数をつくってみます。
こんなかんじです。
CREATE FUNCTION JP_YEAR ( @YMD DATE ) RETURNS INT AS BEGIN DECLARE @YYYY INT IF MONTH(@YMD) < 4 SET @YYYY = YEAR(@YMD) - 1 ELSE SET @YYYY = YEAR(@YMD) RETURN @YYYY END
実際の画面はこんなかんじ。
構文の説明
分解して説明していきます。
CREATE FUNCTION JP_YEAR ( @YMD DATE ) RETURNS INT
上記は、JP_YEARという関数について、日付型の@YMDを引数にして定義しました。
なお、戻り値は整数型です。
BEGIN DECLARE @YYYY INT IF MONTH(@YMD) < 4 SET @YYYY = YEAR(@YMD) - 1 ELSE SET @YYYY = YEAR(@YMD) RETURN @YYYY END
BEGIN~ENDで処理をひとまとめにしてあげています。
処理の中で、@YYYYを定義し、最終的にはこれを戻り値にしてあげています。
@YYYYには、引数に入力された年月日の月が4未満であれば、年から1引いた値を、
そうでなければ、引数の年を代入してあげています。
実行してみる
スカラ関数は、SELECT句やWHERE句などさまざまな場面で活用できます。
ひとまずSELECT句に入れてみます。
SELECT dbo.JP_YEAR('2020/12/11'), dbo.JP_YEAR('2021/1/11'), dbo.JP_YEAR('2021/4/11')
こんなかんじの出力です。
しっかり動いてそうですね。
ちなみに、dboとはスキーマといいますが、今の時点ではそう書くんだなとおもっていてください。m(_ _)m
そのうち説明したいと思います。
その他
関数を
変更する際は、ALTER FUNCTION ~~
削除する際は、DROP FUNCTION
になります。テーブルの作成と同じですね。
以上、今回はここまで。