列sData是一个按字母顺序排列的字符串,如“abcDefghiJkL”。我想创建一个计算位列,称之为bMatchesTwice,对于sData包含“abdfm”中任意两个字母(忽略大小写)的任何行都是如此。正则表达式似乎是最简单的方法,但我不确定如何执行匹配。我该如何实现呢?
答案 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
如果你正在检查每一个,你也可以使这个专栏更加通用。