5

我有一个非常简单的 CLR 函数来进行正则表达式匹配

public static SqlBoolean RegExMatch(SqlString input, SqlString pattern)
{
    if (input.IsNull || pattern.IsNull)
        return SqlBoolean.False;

    return Regex.IsMatch(input.Value, pattern.Value, RegexOptions.IgnoreCase);
}

它允许我写一个类似的 SQL 语句。

SELECT * FROM dbo.table1 WHERE dbo.RegexMatch(column1, '[0-9][A-Z]') = 1
-- match entries in col1 like 1A, 2B etc...

我只是认为重新制定该查询会很好,因此可以将其称为

SELECT * FROM dbo.table1 WHERE column1 REGEXLIKE '[0-9][A-Z]'

是否可以使用 CLR 代码创建新的比较运算符。(我从网上的短暂浏览中猜测答案是否定的,但问没有害处)

4

2 回答 2

6

你不能。您可以创建函数、存储过程、触发器等等——但没有规定可以创建新的 T-SQL 运算符或命令。据我所知,SQL Server 2008R2 中也没有。

于 2010-04-06T08:07:39.237 回答
0

在此链接中,您可以看到如何在 SQLCLR 中声明运算符: http ://msftengprodsamples.codeplex.com/wikipage?title=SS2008!User-Defined%20Data%20Type%20(UDT)%20Sample&referringTitle=Home

例如:

    public static SqlBoolean operator ==(ComplexNumber c1, ComplexNumber c2)
    {
        return c1.Equals(c2);
    }
于 2015-01-07T16:50:29.317 回答