Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我的LIKE查询仅在Microsoft Access 2013中不返回任何记录?_Sql_Ms Access_Jet_Sql Like_Ms Access 2013 - Fatal编程技术网

Sql 为什么我的LIKE查询仅在Microsoft Access 2013中不返回任何记录?

Sql 为什么我的LIKE查询仅在Microsoft Access 2013中不返回任何记录?,sql,ms-access,jet,sql-like,ms-access-2013,Sql,Ms Access,Jet,Sql Like,Ms Access 2013,我的SQL查询如下: 从供应商中选择* 供应商名称在哪里 比如“s%” 当我在W3 School的TryIt Editor v1.2上提交此查询时,它会返回许多记录,其中供应商名称以字母“s”开头,这与预期的一样 但是,当我在Access 2013中对自己的数据库运行此查询时,它不会返回任何记录,即使我的表名和字段名与W3的示例相同 不使用“LIKE”的查询似乎可以正常工作,例如: 从供应商中选择* 其中,供应商名称=零件供应商,股份有限公司 返回相应的记录。只有当使用“LIKE”时,Acces

我的SQL查询如下:

从供应商中选择* 供应商名称在哪里 比如“s%”

当我在W3 School的TryIt Editor v1.2上提交此查询时,它会返回许多记录,其中供应商名称以字母“s”开头,这与预期的一样

但是,当我在Access 2013中对自己的数据库运行此查询时,它不会返回任何记录,即使我的表名和字段名与W3的示例相同

不使用“LIKE”的查询似乎可以正常工作,例如:

从供应商中选择* 其中,供应商名称=零件供应商,股份有限公司

返回相应的记录。只有当使用“LIKE”时,Access才不会返回任何记录

我的问题是,有什么理由让LIKE查询不返回任何记录?后端数据源是一个Microsoft JET数据库这是一个相对较小的数据库-不需要完整的SQL Server,但我认为这不会有什么区别。当我执行查询时,Access不会抱怨语法或抛出错误

来自:

MicrosoftJet使用带有Like运算符的部分匹配字符或通配符,这与大多数SQL方言中使用的字符不同。星号*字符与零个或多个字符匹配,相当于ANSI SQL中的百分比字符。其他Microsoft Jet部分匹配字符包括问号(与单个字段中的任何字符匹配)和数字符号(与单个字段中的任何数字匹配)

应按如下方式修改查询:

从供应商名称为“s*”的供应商中选择*

来自:

MicrosoftJet使用带有Like运算符的部分匹配字符或通配符,这与大多数SQL方言中使用的字符不同。星号*字符与零个或多个字符匹配,相当于ANSI SQL中的百分比字符。其他Microsoft Jet部分匹配字符包括问号(与单个字段中的任何字符匹配)和数字符号(与单个字段中的任何数字匹配)

应按如下方式修改查询:


从供应商名称为“s*”的供应商中选择*

为什么JET在LIKE操作中使用*而不是%作为通配符?相反,为什么标准SQL使用ANSI标准%通配符而不是标准*通配符?在我看来,如果Access在JET数据库查询中检测到使用完整SQL语法,它应该发出某种警告。我认为真正的问题是Access为什么不使用标准%通配符?它类似于IE vs Internet标准。SQL无疑已成为数据库查询的事实标准,但我的意思是根据我的经验,regex等,*是通配符。所以,这就是为什么我要问这两个问题——为什么基于ANSI的SQL偏离了传统标准,为什么Access偏离了SQL ANSI标准。为什么JET在类似的操作中使用*而不是%作为通配符?相反,为什么标准SQL使用ANSI标准%通配符而不是标准*通配符?在我看来,如果Access在JET数据库查询中检测到使用完整SQL语法,它应该发出某种警告。我认为真正的问题是Access为什么不使用标准%通配符?它类似于IE vs Internet标准。SQL无疑已成为数据库查询的事实标准,但我的意思是根据我的经验,regex等,*是通配符。所以,这就是为什么我要问这两个问题——为什么基于ANSI的SQL偏离了传统标准,为什么Access偏离了SQL ANSI标准。另请参见:我已经回答了好几次了。请参阅,以获得全面的答案。另请参阅:根据我所知,这已经回答了好几次了。请参阅以获取全面的答案。