结合IN和LIKE功能



我想过滤所有Name类似于"Aay%"、"Ara%"one_answers"Kim%"的条目。。。。。

对于IN,我使用:

SELECT *
FROM TABLE 
WHERE NAME IN @List_OF_NAME

对于LIKE:

SELECT * 
FROM TABLE
WHERE NAME LIKE 'Aay%'

有没有把这两种方法结合起来。所以,我得到了所有名称类似'Aay%' , 'Ara%', 'Kim%'.....的条目?有获得此功能的线索吗?

编辑:我尝试了这里提到的方法:是否存在";"喜欢";以及";IN";在SQL中?

但是,我得到了这个错误:

不能对列'Name'使用CONTAINS或FREETEXT谓词,因为它不是全文索引

LIKE没有短路表达式,IN表示相等。您确实需要重复以下表达式:

SELECT * 
FROM MYTABLE
WHERE NAME LIKE 'Aay%' OR NAME LIKE 'Ara%' OR NAME LIKE 'Kim%'

如果您有一个大的值列表,您可能希望将它们放在派生表中,并使用EXISTS,如下所示:

SELECT * 
FROM MYTABLE t
WHERE EXISTS (
SELECT 1 
FROM (VALUES ('Aay%'), ('Ara%'), ('Kim%')) x(NAME)
WHERE t.NAME LIKE x.NAME
)

扩展该逻辑,您可以很好地使用表变量或临时表来代替VALUES()

由于您对所有案例的前三个字母都感兴趣,因此可以使用左边的部分并使用in子句:

SELECT *
FROM MyTable
WHERE LEFT(NAME, 3) IN ('Aay', 'Ara', 'Kim')

最新更新