单词与LIKE分别匹配?

时间:2018-11-08 03:53:50

标签: sql sql-server regex

有人有与以下情况相匹配的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

5 个答案:

答案 0 :(得分:1)

您可以在下面尝试

DEMO

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%。