ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

SQL Serverのユーザー定義関数を使おう~(11)任意の日における生徒の年齢を知るユーザー定義関数

leave a comment »

生徒の年齢を知りたい場合がある。それも任意の日における年齢を知る必要がある。というのも、学校における各種統計において、「その日の年齢」であったり「ある基準日における年齢」であったり、年齢を算出する基準日が異なるためだ。これに対応するユーザー定義関数を作ってみた。

生徒は学籍番号で管理されており、「生徒」テーブルに生年月日が保存されている。この生年月日から年齢を算出するユーザー定義関数だ。

使い方はこうだ。

select dbo.fx生徒年齢(学籍番号,基準日)

たとえば2010年4月1日における学籍番号0101001の生徒の年齢を知るには、実際にはこんなかんじ。

select dbo.fx生徒年齢(‘0101001′,’2010/04/01’)

——————(ここからユーザー定義関数)——————

create function [dbo].[fx生徒年齢]

    (
    @p_学籍番号 char(7),
    @p_基準日 smalldatetime
    )
returns int
AS
begin
declare @判定 int
declare @生年月日 smalldatetime
set @生年月日 = (select 生年月日 from 生徒 where 学籍番号 = @p_学籍番号)
set @判定 = datediff(dd
,cast(‘2000/’+cast(month(@生年月日) as varchar(2))+’/’+cast(day(@生年月日) as varchar(2)) as smalldatetime)
,cast(‘2000/’+cast(month(@p_基準日) as varchar(2))+’/’+cast(day(@p_基準日) as varchar(2))as smalldatetime))
return (select case when @判定 < 0 then datediff(yy,@生年月日,@p_基準日)-1
when @判定 >= 0 then datediff(yy,@生年月日,@p_基準日) end)
return null
end

——————(ここまでユーザー定義関数)——————

Written by Yoshio Matsumoto

2011年2月16日 @ 12:11 AM

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。