据我所知,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
答案 0 :(得分:2)
不,抱歉。 PATINDEX
不允许您匹配正则表达式,它使用与LIKE
一起使用的相同类型的模式。
PATINDEX
的工作方式与LIKE
类似,因此您可以使用任何通配符。您不必将百分比包含在百分比之间。PATINDEX('a%', 'abc')
返回1
,PATINDEX('%a', 'cba')
返回3
。 与LIKE
不同,PATINDEX
会返回一个与CHARINDEX
类似的位置。
如果在T-SQL中需要正则表达式匹配,则必须依赖自定义CLR函数/过程。您还可以查看this以查看是否可以使用它。