Хорошо, исправленная версия, которая, я думаю, обрабатывает все ситуации. Это будет работать в MS SQL Server, поэтому вам может потребоваться настроить его для вашей СУБД, используя локальную таблицу и функцию REPLICATE. Предполагается, что переданный параметр называется @search_string. Кроме того, поскольку он использует VARCHAR вместо NVARCHAR, если вы используете расширенные символы, обязательно измените это.
Последний момент, о котором я сейчас думаю ... это позволит дублировать буквы. Например, «GOOD» найдет «DODO», хотя в «GOOD» есть только одна «D». Он не найдет слова большей длины, чем ваше оригинальное слово. Другими словами, пока он найдет «DODO», он не найдет «DODODO». Может быть, это даст вам отправную точку для работы, хотя в зависимости от ваших точных требований.
DECLARE @search_table TABLE (search_string VARCHAR(4000))
DECLARE @i INT
SET @i = 1
WHILE (@i <= LEN(@search_string))
BEGIN
INSERT INTO @search_table (search_string)
VALUES (REPLICATE('[' + @search_string + ']', @i)
SET @i = @i + 1
END
SELECT
word,
definition
FROM
My_Words
INNER JOIN @search_table ST ON W.word LIKE ST.search_string
Исходный запрос до моего редактирования, просто чтобы он был здесь:
SELECT
word,
definition
FROM
My_Words
WHERE
word LIKE REPLICATE('[' + @search_string + ']', LEN(@search_string))