sql匹配字符串,给定所有字母

时间:2016-10-12 07:00:52

标签: sql sql-server

我希望匹配给定所有字符的单词,字符可以在单词中的任何位置,但所有给定字符应包含在匹配字符串中

前:

1   BMW
4   LAND ROVER
6   VOLVO
9   IVECO
14  VOLKSWAGEN
20  CHEVROLET

给出的字是" VW"那么结果应该是

14  VOLKSWAGEN

2 个答案:

答案 0 :(得分:3)

尝试这样

DECLARE @tbl TABLE(ID INT,YourWord VARCHAR(100));
INSERT INTO @tbl VALUES 
 (1,'BMW')
,(4,'LAND ROVER')
,(6,'VOLVO')
,(9,'IVECO')
,(14,'VOLKSWAGEN')
,(20,'CHEVROLET');

- 您的搜索字词(不应包含两次字母......)

DECLARE @GivenWord VARCHAR(100)='VW';

- 第一个CTE选择了多个正在运行的数字,因为给定单词中有字母(sys.objects的数量应该足够......)

WITH Numbers AS
(
    SELECT TOP (LEN(@GivenWord)) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Nr
    FROM sys.objects
)

- 第二个CTE分别挑选每个字母

,EachChar AS
(
SELECT SUBSTRING(@GivenWord,Nr,1) AS C
FROM  Numbers
)

- 主要查询CROSS JOIN并过滤那些字母是单词

的一部分
SELECT YourWord
FROM @tbl AS tbl
CROSS JOIN EachChar
WHERE tbl.YourWord LIKE '%' + EachChar.C + '%'
GROUP BY tbl.YourWord
HAVING COUNT(YourWord)=LEN(@GivenWord)

HAVING检查找到的计数是否等于给定单词的长度。这意味着:所有字符都存在于搜索词

答案 1 :(得分:0)

SELECT * FROM [Table_name] WHERE brand LIKE '%V%' AND brand LIKE '%W%';