有人有与以下情况相匹配的LIKE模式吗?
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
答案 0 :(得分:1)
您可以在下面尝试
select * from tablename
where NAMES like %LEI%TAI%MAN%
输出:
id names
2 CHAN SIO LONG LEI TAI MAN
3 LEI CHAN TAI MAN
答案 1 :(得分:1)
您也可以这样做:
Select * from tablename
where NAMES like '%LEI%'
AND NAMES like '%TAI%'
AND NAMES like '%MAN%';
答案 2 :(得分:0)
LIKE
运算符不会带来太多复杂性
您可以尝试这种方式
SELECT * FROM Table1
WHERE NAMES LIKE '%'+ REPLACE('LEI TAI MAN',' ','%') + '%'
答案 3 :(得分:0)
这可能是解决您问题的最佳解决方案。
SELECT *
FROM <table name> WHERE <column name> LIKE '%LEI% %TAI% %MAN%'
答案 4 :(得分:0)
如果模式可以以任何顺序存在,则可以使用上述类似选项:
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%。