我希望匹配给定所有字符的单词,字符可以在单词中的任何位置,但所有给定字符应包含在匹配字符串中
前:
1 BMW
4 LAND ROVER
6 VOLVO
9 IVECO
14 VOLKSWAGEN
20 CHEVROLET
给出的字是" VW"那么结果应该是
14 VOLKSWAGEN
答案 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%';