如何在 sql-LIKE 通配符中使用非字符列表?

How to use a non-char list inside of an sql-LIKE wildcard?

我正在尝试采用以下代码并使其在没有 VBA 的情况下变干。 代码(MS 访问 2007 sql):

SELECT *
FROM Student_Enrollment
WHERE ID LIKE '*2*'
OR ID LIKE '*5*'
OR ID LIKE '*8*'
OR ID LIKE '*17*'
OR ID LIKE '*14*'
OR ID LIKE '*11*'
OR ID LIKE '*21*'

在我看来,像下面这样的事情应该是可能的:

SELECT *
FROM Student_Enrollment
WHERE ID LIKE '*[2,5,8,17,14,11,21]*'

但它不起作用。它将每个列表元素视为一个单独的列表,例如,它 returns 条目其 id 包含 1 尽管 1 不在上面的列表中,但 11 在那里并且它认为 11 只是 1,1 ...如何解决这个问题?

不幸的是,您无法完全按照自己的意愿行事。但是您可以将逻辑简化为:

SELECT *
FROM Student_Enrollment
WHERE ID LIKE "*[258]*" OR
      ID LIKE "*1[174]*" OR
      ID LIKE "*21*';

然后,如果某物匹配“21”,那么它也匹配“*2”,所以最后一个条件是多余的:

SELECT *
FROM Student_Enrollment
WHERE ID LIKE "*[258]*" OR
      ID LIKE "*1[174]*"