在SQL Server计算列表达式中使用正则表达式?

时间:2016-01-15 15:50:08

标签: sql-server regex

列sData是一个按字母顺序排列的字符串,如“abcDefghiJkL”。我想创建一个计算位列,称之为bMatchesTwice,对于sData包含“abdfm”中任意两个字母(忽略大小写)的任何行都是如此。正则表达式似乎是最简单的方法,但我不确定如何执行匹配。我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

我认为您必须使用案例表达式并分别检查每个特定字符的存在。 e.g。

CREATE TABLE #T (sData VARCHAR(255));
INSERT #T (sData) VALUES ('abcDefghiJkL'), ('XXXXXXA');

ALTER TABLE #T 
ADD bMatchesTwice AS CASE WHEN 
                        (CASE WHEN sData LIKE '%a%' THEN 1 ELSE 0 END +
                        CASE WHEN sData LIKE '%b%' THEN 1 ELSE 0 END +
                        CASE WHEN sData LIKE '%d%' THEN 1 ELSE 0 END +
                        CASE WHEN sData LIKE '%f%' THEN 1 ELSE 0 END +
                        CASE WHEN sData LIKE '%m%' THEN 1 ELSE 0 END) > 1 
                    THEN 1 ELSE 0 END;

SELECT  *
FROM    #T;

拥有一个简单的MatchCount列可能更好:

ALTER TABLE #T 
ADD MatchCount AS CASE WHEN sData LIKE '%a%' THEN 1 ELSE 0 END +
                    CASE WHEN sData LIKE '%b%' THEN 1 ELSE 0 END +
                    CASE WHEN sData LIKE '%d%' THEN 1 ELSE 0 END +
                    CASE WHEN sData LIKE '%f%' THEN 1 ELSE 0 END +
                    CASE WHEN sData LIKE '%m%' THEN 1 ELSE 0 END;

所以从原始样本中你会得到:

sData           MatchCount
-----------------------------
abcDefghiJkL    4
XXXXXXA         1

如果你正在检查每一个,你也可以使这个专栏更加通用。