Sql 单词分别与LIKE匹配?
有人有类似的模式,符合以下情况吗Sql 单词分别与LIKE匹配?,sql,sql-server,regex,Sql,Sql Server,Regex,有人有类似的模式,符合以下情况吗 ID| NAMES 1 | CHAN TAI MAN 2 | CHAN SIO LONG LEI TAI MAN 3 | LEI CHAN TAI MAN ===================== 我正在使用SqlServer2008,我需要搜索LEI TAI MAN,然后我的预期结果: 2 | CHAN SIO LONG LEI TAI MAN 3 | LEI CHAN TAI MAN 你可以在下面试试 输出: id names 2 CHAN SI
ID| NAMES
1 | CHAN TAI MAN
2 | CHAN SIO LONG LEI TAI MAN
3 | LEI CHAN TAI MAN
=====================
我正在使用SqlServer2008,我需要搜索LEI TAI MAN,然后我的预期结果:
2 | CHAN SIO LONG LEI TAI MAN
3 | LEI CHAN TAI MAN
你可以在下面试试
输出:
id names
2 CHAN SIO LONG LEI TAI MAN
3 LEI CHAN TAI MAN
您也可以这样做:
Select * from tablename
where NAMES like '%LEI%'
AND NAMES like '%TAI%'
AND NAMES like '%MAN%';
对于LIKE运算符,没有太多的复杂性 你可以这样试试
SELECT * FROM Table1
WHERE NAMES LIKE '%'+ REPLACE('LEI TAI MAN',' ','%') + '%'
这可能是解决你问题的最好办法
如果模式可以以任何顺序存在,则可以使用类似于以下内容的上述选项:
WHERE Value LIKE '%LEI%'
AND Value LIKE '%MAN%'
AND Value LIKE '%TAI%'
或者您可以执行如下操作,将模式存储在表变量中
DECLARE @Data TABLE (
Id BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Value NVARCHAR(100) NOT NULL
);
INSERT INTO @Data
(Value)
VALUES
('CHAN TAI MAN'),
('CHAN SIO LONG LEI TAI MAN'),
('LEI CHAN TAI MAN');
DECLARE @Patterns TABLE (
Pattern NVARCHAR(10) NOT NULL,
UNIQUE CLUSTERED (Pattern)
);
INSERT INTO @Patterns
(Pattern)
VALUES
('LEI'),
('TAI'),
('MAN');
DECLARE @PatternCount INT;
SET @PatternCount = (SELECT COUNT(1) FROM @Patterns);
SELECT *
FROM @Data AS d
WHERE @PatternCount = (
SELECT COUNT(1)
FROM @Patterns AS p
WHERE d.Value LIKE CONCAT('%',p.Pattern,'%')
);
通过执行第二个选项,您可以以逗号分隔的形式传入一个选项字符串,使用一个函数将其规范化为一个可以插入表变量的数组,然后执行我列出的操作。很多有趣的选择
类似这样的东西也可以让您创建一个阈值。类似的东西必须至少匹配60%。%LEI%TAI%MAN%Dale Burrell的肯定会有用。如果单词的顺序不总是一样的,例如manlei-TAI,你可以使用像“%LEI%”这样的名字,像“%TAI%”这样的名字,像“%MAN%”这样的名字
WHERE Value LIKE '%LEI%'
AND Value LIKE '%MAN%'
AND Value LIKE '%TAI%'
DECLARE @Data TABLE (
Id BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Value NVARCHAR(100) NOT NULL
);
INSERT INTO @Data
(Value)
VALUES
('CHAN TAI MAN'),
('CHAN SIO LONG LEI TAI MAN'),
('LEI CHAN TAI MAN');
DECLARE @Patterns TABLE (
Pattern NVARCHAR(10) NOT NULL,
UNIQUE CLUSTERED (Pattern)
);
INSERT INTO @Patterns
(Pattern)
VALUES
('LEI'),
('TAI'),
('MAN');
DECLARE @PatternCount INT;
SET @PatternCount = (SELECT COUNT(1) FROM @Patterns);
SELECT *
FROM @Data AS d
WHERE @PatternCount = (
SELECT COUNT(1)
FROM @Patterns AS p
WHERE d.Value LIKE CONCAT('%',p.Pattern,'%')
);