为什么SQL LIKE不能在Microsoft Access中工作?

poo*_*poo 6 ms-access

我想做一个搜索语句并查询这样的事情

select * from table where col like '%vkvk%' 
Run Code Online (Sandbox Code Playgroud)

但通过反复试验,我得出的结论是,访问不适用于LIKE或通配符运算符.有没有人有其他解决方案,因为我实际上并不是这样,所以我真的不知道.

Jay*_*ggs 13

尝试:

select * from table where col like '*vkvk*'
Run Code Online (Sandbox Code Playgroud)

使用星号表示通配符.


Dav*_*ton 5

如果要使用某些类似于SQL Server的SQL语法,请转到"访问选项"并将其设置为"SQL 92"模式.据我所知,这有两个主要的事情(可能还有其他事情):

  1. 允许您使用%和_作为通配符而不是Jet SQL的*和?.

  2. 允许您使用非疯狂的派生表语法:

    SELECT MyTable.*
    FROM (SELECT * FROM SomeTable) As MyTable
    
    Run Code Online (Sandbox Code Playgroud)

...而不是bollixed-up Jet方法:

   SELECT MyTable.*
   FROM [SELECT * FROM SomeTable]. As MyTable
Run Code Online (Sandbox Code Playgroud)

...由于必须在派生表定义中使用括号,因此必须在表格和字段名称中包含空格,这会完全打破Jet语法.

正如我所说,可能还有其他一些变化,但如果您是SQL Server程序员,您可能会发现更容易设置SQL 92模式.另一方面,大多数Access帮助使用Access/Jet/ACE约定,因此您可能会因尝试使用它而感到更加困惑.

编辑:

自从发布此文件以来,我发现在现有的Access应用程序中打开SQL 92模式存在问题.我发现的两个是:

  1. 它更改了保留字列表,这意味着以前使用SQL 89保留字列表的SQL可能会中断(如果它使用SQL 92保留字).

  2. 它可以使用隐藏的第一列(这是Access应用程序中非常常见的UI对象)来破坏多列组合框.具体来说,它会破坏Autoexpend/autoselect行为.

可能还有其他问题,但是当我在客户端项目中打开SQL 92模式来测试SO的某些内容并且忘记在分发下一次更新时将其关闭时,我意外地发现了这些问题.幸运的是,很快就发现了问题,并且将SQL 92模式识别为问题的原因并没有花太多时间.

简而言之,我不认为Access中的SQL 92模式对任何人都有用.在我看来,这是一个针对那些不会首先以交互方式使用Access的人的功能.