

今回の記事は、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