Как найти строки, содержащие два слова «Первый» + «Второй» независимо от последовательности?

#360Search #SearchAll #SearchContain #SearchEverything #SQL #SELECT

Как найти строки, содержащие два слова «Первый» + «Второй» независимо от того, в последовательности или нет? ищет единственное условие, чтобы покрыть этот случай.

Вот MyTable:

---------------------------
RowNo, MyStringColumn
---------------------------
1 , 'First Second Third'
2 , 'Second Third First'
3 , 'Third First Second'
4 , 'First Third Second'
5 , 'Second Second Third'

Ожидаемый результат: ряд №1,2,3,4

---------------------------
RowNo, MyStringColumn
---------------------------
1 , 'First Second Third'
2 , 'Second Third First'
3 , 'Third First Second'
4 , 'First Third Second'

ниже SQL возвращает Row#1,3,4 и не возвращает Row#2 из-за неупорядоченной последовательности.

SELECT * FROM MyTable WHERE MyStringColumn like '%First%Second%

Вот сценарий SQL для создания MyTable и данных

DROP TABLE IF EXISTS [#MyTable];
SELECT [RowNo],[MyStringColumn] INTO [#MyTable]
FROM (SELECT (1)[RowNo], ('First Second Third')[MyStringColumn]
       UNION SELECT 2, 'Second Third First'
       UNION SELECT 3, 'Third First Second'
       UNION SELECT 4, 'First Third Second'
       UNION SELECT 5, 'Second Second Third'
)t

SELECT * FROM [#MyTable] WHERE [MyStringColumn] LIKE '%First%Second%'
SELECT * FROM MyTable WHERE MyStringColumn like '%First%Second% OR MyStringColumn like '%Second%First%?
Dale K 16.03.2022 22:53
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Всего LIKE дважды.

SELECT *
FROM MyTable
WHERE MyStringColumn LIKE '%First%' 
  AND MyStringColumn LIKE '%Second%' 

И если вы хотите убедиться, что это 2 отдельных слова

SELECT *
FROM MyTable
WHERE ' '+MyStringColumn+' ' LIKE '% First %' 
  AND ' '+MyStringColumn+' ' LIKE '% Second %' 

Но это также найдет twenty-first, fifty-second и second-last. Нужны пробелы.

Aaron Bertrand 16.03.2022 23:39

@AaronBertrand Хорошо. Эти 2 слова, вероятно, были просто для упрощенного примера. Но это может иметь значение.

LukStorms 16.03.2022 23:47
Ответ принят как подходящий

Подход на основе string_split. Полезно, когда вы хотите проверить много слов:

select *
from t
where exists (
    select 1
    from string_split(t.MyStringColumn, ' ')
    where value in ('first', 'second')
    having count(distinct value) = 2 -- this should match the number of items in the "in" clause
)

Спасибо, @salman, это работает!!! как я его искал...

Haseeb 18.03.2022 12:36

Другие вопросы по теме