строки сопоставления sql с заданными всеми буквами в любом месте

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я хочу сопоставить слова с заданными всеми символами, а символы могут быть в любом месте слова, но все заданные символы должны быть включены в строку сопоставления

Пример :

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

данное слово — «VW», тогда результат должен быть

 14  VOLKSWAGEN
  

Комментарии:

1. mysql или SQL-Server?

2. MS sql почему людям дается точка для моего вопроса?

3. Потому что вы не показываете, что вы пробовали

4. Используя только ‘VW’, вы мало что можете сделать в этой таблице. Если вы действительно хотите это использовать, я предлагаю вам добавить столбец с сокращениями или что-то в этом роде.

5. Вам нужна другая таблица со всеми официальными именами и их псевдонимами. Фольксваген Фольксваген, Шевроле — Шевроле и т. Д.

Ответ №1:

Попробуйте сделать это так

 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 s и фильтрует те, где буква является частью слова

 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. @LittleDragon, ну, на SO людям не нравится простой, пожалуйста, сделайте мою работу -вопрос. Как-то вежливо показать собственные усилия и объяснить, что проблема действительно возникла. Не просто простой, мне нужен запрос для XY -вопроса…

Ответ №2:

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

Комментарии:

1. Слово «VW» является динамическим.

2. Динамически устанавливаемая буква в словах и выше

3. Задача состоит в том, чтобы разделить данное слово на отдельные символы. Для вашего подхода потребуется динамически создаваемое WHERE предложение с таким количеством LIKE s, сколько букв в данном слове. Выполнение этого жесткого кода не является ответом на фактический вопрос…