プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】スカラ関数 -26-

www.pon-x.jp

前回の続き

今回は、関数を自作する際の説明をしていきます。

スカラー関数

スカラ―関数とは、単一の値を返してくれる関数であり、例えば同様の処理をたくさんやるときなどに関数定義をしておくと、簡単な構文で実装できることになります。

使い方はこんな感じ

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

実際の画面はこんなかんじ。
f:id:hanabusa-snow:20201211092556p:plain

構文の説明

分解して説明していきます。

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')

こんなかんじの出力です。
f:id:hanabusa-snow:20201211093558p:plain
しっかり動いてそうですね。

ちなみに、dboとはスキーマといいますが、今の時点ではそう書くんだなとおもっていてください。m(_ _)m
そのうち説明したいと思います。

その他

関数を
変更する際は、ALTER FUNCTION ~~
削除する際は、DROP FUNCTION
になります。テーブルの作成と同じですね。







以上、今回はここまで。