我想过滤所有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')