2010年4月18日日曜日

SQL-Server 2008 Expressで、数値の桁数を求める関数をSQLCLRで作る



今回の記事は、SQL-Server 2008 Expressにおいて、数値の桁数を求める関数をSQLCLRで作ってみます。

123という数値ならば3桁、141000ならば6桁と求まるようにする関数です。
こういうのは、あれこれ悩まずにもうC#言語(SQLCLR)でさくっと作ってしまうのが早道かなぁと想います。


SQLCLRの登録については過去の記事をご参考になさって下さい


■プログラムコード(インデントが消えています)
(無償版のVisual C# 2008 Expressで書く事が出来ます。)
(環境に依存する箇所は、ご自分の環境に合わせて読んで下さい。)

//------------------------------------ //数値の桁数 //------------------------------------ [Microsoft.SqlServer.Server.SqlFunction]
public static SqlInt32 SQLCLR_Digits(

SqlDouble p_value

)
{
Int32 int_result = 0;
try {
int_result = (Int32)((Double)p_value).ToString().Length;
}

catch (System.Exception obj_err)
{ //例外が発生したらSQL-Serverに投げつけて強制終了させる。
throw obj_err;
}
return (SqlInt32)int_result;
}


■SQL関数によるラッピング
(環境に依存する箇所は、ご自分の環境に合わせて読んで下さい。)

-- ----------------------------------------------
-- 数値の桁数を求める -- (パラメータ説明)
-- @p_value:数値

-- ----------------------------------------------

create function SQLCLR_Digits( @p_value float )
RETURNS int
AS EXTERNAL NAME ASSEMBLY_SQLCLR.CLS_SQLCLR.SQLCLR_Digits;
GO