Есть ли в SQL комбинация "LIKE" и "IN"? - PullRequest
302 голосов
/ 10 июня 2010

В SQL мне (к сожалению) часто приходится использовать условия "LIKE" из-за баз данных, которые нарушают почти все правила нормализации.Я не могу изменить это прямо сейчас.Но это не имеет отношения к вопросу.

Кроме того, я часто использую условия типа WHERE something in (1,1,2,3,5,8,13,21) для лучшей читаемости и гибкости моих операторов SQL.

Есть ли какой-либо возможный способ объединить эти две вещи безписать сложные подвыборы?

Я хочу что-то столь же простое, как WHERE something LIKE ('bla%', '%foo%', 'batz%') вместо этого:

WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'

Я работаю здесь с SQl Server и Oracle, но мне интересно, еслиэто возможно в любой СУБД.

Ответы [ 23 ]

0 голосов
/ 07 июня 2018

Начиная с 2016 года, SQL Server включает STRING_SPLIT функцию .Я использую SQL Server v17.4, и у меня это работает:

DECLARE @dashboard nvarchar(50)
SET @dashboard = 'P1%,P7%'

SELECT * from Project p
JOIN STRING_SPLIT(@dashboard, ',') AS sp ON p.ProjectNumber LIKE sp.value
0 голосов
/ 20 ноября 2017

Нет такого ответа:

SELECT * FROM table WHERE something LIKE ('bla% %foo% batz%')

У оракула нет проблем.

0 голосов
/ 17 апреля 2015

сделать это

WHERE something + '%' in ('bla', 'foo', 'batz')
OR '%' + something + '%' in ('tra', 'la', 'la')

или

WHERE something + '%' in (select col from table where ....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...