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
.
相同类型的模式
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看是否可以使用。
据我所知,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
.
PATINDEX
works just likeLIKE
, so you can use any of the wildcards. You do not have to enclose the pattern between percents.PATINDEX('a%', 'abc')
returns1
andPATINDEX('%a', 'cba')
returns3
. UnlikeLIKE
,PATINDEX
returns a position, similar to whatCHARINDEX
does.
如果您需要在 T-SQL 中进行正则表达式匹配,您将不得不依赖自定义 CLR function/procedure。也可以查看this看是否可以使用。