#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, сколько букв в данном слове. Выполнение этого жесткого кода не является ответом на фактический вопрос…