誰かがCLRで正規表現を使用することに興味がある場合は、ここに解決策があります。以下の関数(C#.net 4.5)は、パターンが一致する場合は1を返し、パターンが一致しない場合は0を返します。サブクエリの行にタグを付けるために使用します。SQLfunction属性は、このメソッドがSQLサーバーが使用する実際のUDFであることをSQLサーバーに通知します。ファイルをdllとして、Management Studioからアクセスできる場所に保存します。
// default using statements above
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
namespace CLR_Functions
{
public class myFunctions
{
[SqlFunction]
public static SqlInt16 RegexContain(SqlString text, SqlString pattern)
{
SqlInt16 returnVal = 0;
try
{
string myText = text.ToString();
string myPattern = pattern.ToString();
MatchCollection mc = Regex.Matches(myText, myPattern);
if (mc.Count > 0)
{
returnVal = 1;
}
}
catch
{
returnVal = 0;
}
return returnVal;
}
}
}
Management Studioで、プログラマビリティを介してDLLファイルをインポートします-アセンブリ-新しいアセンブリ
次に、このクエリを実行します。
CREATE FUNCTION RegexContain(@text NVARCHAR(50), @pattern NVARCHAR(50))
RETURNS smallint
AS
EXTERNAL NAME CLR_Functions.[CLR_Functions.myFunctions].RegexContain
次に、アセンブリを保存したデータベースを介して関数に完全にアクセスできるようになります。
次に、次のようなクエリで使用します。
SELECT *
FROM
(
SELECT
DailyLog.Date,
DailyLog.Researcher,
DailyLog.team,
DailyLog.field,
DailyLog.EntityID,
DailyLog.[From],
DailyLog.[To],
dbo.RegexContain(Researcher, '[\p{L}\s]+') as 'is null values'
FROM [DailyOps].[dbo].[DailyLog]
) AS a
WHERE a.[is null values] = 0