PATINDEX在匹配的rexpresson上返回0

时间:2015-01-28 14:13:59

标签: regex tsql

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

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

这么简单:

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

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

可悲的是,即使使用带有这样的尝试的通配符,它​​总是返回0:

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

在RegExr和oracle端,值似乎匹配,这是T-SQL上的问题吗?如果是的话,是否有针对此的工作原理?

提前致谢

的Matthias

1 个答案:

答案 0 :(得分:2)

不,抱歉。 PATINDEX不允许您匹配正则表达式,它使用与LIKE一起使用的相同类型的模式。

来自documentation

的引用
  

PATINDEX的工作方式与LIKE类似,因此您可以使用任何通配符。您不必将百分比包含在百分比之间。 PATINDEX('a%', 'abc')返回1PATINDEX('%a', 'cba')返回3。   与LIKE不同,PATINDEX会返回一个与CHARINDEX类似的位置。

如果在T-SQL中需要正则表达式匹配,则必须依赖自定义CLR函数/过程。您还可以查看this以查看是否可以使用它。