Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 单词分别与LIKE匹配?_Sql_Sql Server_Regex - Fatal编程技术网

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,'%')
    );