このブログを見て下さった皆様に、心より感謝申し上げます。名前はゲームブログですが、色々な話題を書かせて頂きたいと思います(大好きな写真/映像/カメラ、ペン、コンピュータ、食べ物、映画、クルマ、家電製品などなど)。 なにとぞ、これからもよろしくお願いいたします。皆様あってのブログです。
2010年4月21日水曜日
SQL-Server 2008 Expressで、正規表現で文字列のパターン判定をする関数をSQLCLRで作ってみる(2)
今回の記事は、先日書かせていただいた、「SQL-Server 2008 Expressで、正規表現で文字列のパターン判定をする関数をSQLCLRで作ってみる」の続編です。
前回は、SQL-Server 2008 Expressにおいて、正規表現を使った文字列検索をする関数を作りましたが、nullのデータが入ってくるとエラーになってしまいます。
それを回避するバージョンを作ってみました。
正規表現をlikeと同じ使い勝手で利用できるようになると、仕事でもプライベートでも、とにかく分析作業などは段違いに効率が良くなります。
また、SQL-Serverならではといいましょうが、条件を複数に書き分けて、肯定と否定を織り交ぜた複雑な条件もさくさく書く事が出来るわけです。
正規表現は、本当に強力です。
■使用例■
--先頭が数字で始まるゲーム名。
--しかし、末尾は数字では終わらない。
SELECT
GAME_NAME
FROM #T_GAME
WHERE dbo.SQLCLR_Regex(GAME_NAME,'^\d+') = 1 --肯定と
AND dbo.SQLCLR_Regex(GAME_NAME,'\d+$') = 0 --否定の組み合わせ
■コード■
(インデントは消えています)
(無償版のVisual C# 2008でプログラムを書けます)
//------------------------------------
//正規表現による文字列パターン判定
//------------------------------------
//using System.Text.RegularExpressions;を記述して下さい。
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean SQLCLR_Regex(
SqlString p_value,
SqlString p_pat
)
{
//正規表現
Regex obj_rx;
//結果格納エリア
SqlBoolean Qbol_result = false;
try
{
//SQL-ServerからNULLが来ない時に処理する。
if (!(p_value.Equals(SqlString.Null)))
{
obj_rx = new Regex((string)p_pat);
if (obj_rx.IsMatch((string)p_value))
{
Qbol_result = true;
}
}
}
catch (System.Exception obj_err)
{ //例外が発生したらSQL-Serverに投げつけて強制停止する。
throw obj_err;
}
return Qbol_result;
}