PATINDEX 在匹配的 rexpresson 上返回 0

PATINDEX returning 0 on matching rexpresson

据我所知,T-SQL 有可能检查正则表达式,通过 PATINDEX.

我的任务很简单:我得到一个电信型(例如phone)。在映射 table 上,保存了验证此类型的正则表达式。所以在保存之前,我想检查一下这个正则表达式。

如此简单:

  -- Check the regular expression for phone 
  DECLARE  @regExp  nvarchar(255);

  SELECT   @regExp = tt.ValidationRegex
  FROM     Core.TelecomType tt
  WHERE    tt.Code =  @DEFAULT_PHONE_TYPE;

遗憾的是,这总是 returns 0,即使使用通配符尝试这样:

  SET @regExp = CONCAT('%', @regExp, '%');
  SET @regExp = CONCAT(@regExp, '%');
  SET @regExp = CONCAT('%', @regExp );

在 RegExr 和 oracle 端,值似乎匹配,所以这是 T-SQL 上的问题吗?如果是,是否有解决方法?

提前致谢

马蒂亚斯

不,对不起。 PATINDEX 不允许您匹配正则表达式,它使用与 LIKE.

相同类型的模式

引自documentation

PATINDEX works just like LIKE, so you can use any of the wildcards. You do not have to enclose the pattern between percents. PATINDEX('a%', 'abc') returns 1 and PATINDEX('%a', 'cba') returns 3. Unlike LIKE, PATINDEX returns a position, similar to what CHARINDEX does.

如果您需要在 T-SQL 中进行正则表达式匹配,您将不得不依赖自定义 CLR function/procedure。也可以查看this看是否可以使用。