Access sql Select From Where SUBSTRING=combobox.value

Access sql Select From Where SUBSTRING=combobox.value,sql,ms-access,Sql,Ms Access,我想首先声明,这是我第一天尝试SQL,我在access方面有大约5个小时的经验。认为答案中的任何歧义都会被误解。 我有一个包含项目信息的表,其中项目编号在字段[Projet AHNS]中,文档所属的项目编号在字段[ID]中。显然,每个项目都有几个文档 项目在[Liste Projets]中用编号标识,如H-1234![Projet AHNS]但是\u H-1234=567在[Documents]中![ID]。我想有一个查询,可以检索所有文件从一个给定的项目。我首先在字段[Numéro docum

我想首先声明,这是我第一天尝试SQL,我在access方面有大约5个小时的经验。认为答案中的任何歧义都会被误解。

我有一个包含项目信息的表,其中项目编号在字段
[Projet AHNS]
中,文档所属的项目编号在字段
[ID]
中。显然,每个项目都有几个文档

项目在
[Liste Projets]中用编号标识,如
H-1234
![Projet AHNS]
但是
\u H-1234=567
[Documents]中![ID]
。我想有一个查询,可以检索所有文件从一个给定的项目。我首先在字段
[Numéro document(Sans Page)]
中请求文档编号。我写道:

SELECT [Numéro Document (Sans Page)]
FROM [Documents]
WHERE [ID] = "_H-1234=567"
                 ^^ This static example would be replaced by a combobox value when OK
这在某种程度上起了作用,我从H-1234项目中得到了一份文件。不幸的是,由于项目是由组合框中的
H-1234
引用的,因此我需要戴上正则表达式手套删除“=”和下划线后的唯一标识符,以便检索所有文档。一开始,我试过类似的方法

SELECT [Numéro Document (Sans Page)]
FROM [Documents]
WHERE SUBSTRING([ID], 2) = "H-9978=00001"
只是想看看我是否可以让子字符串工作以除去“3;”。显然不是,而且我在网上找不到信息(也许我用的搜索词不对)。有人能帮我吗?我最终还是想去

SELECT [Numéro Document (Sans Page)]
FROM [Documents]
WHERE SOME_REGEX([ID]) = ComboBoxValue
                  ^            ^- Would contain a string such as H-1234
                  '- ID is like "_H-1234=567" 
请写下您对问题清晰度的任何意见,因为我可以成为SQL中的常规海报,但我不确定我的语法是否正确。

您可以使用

RIGHT(Id,LEN(Id)-1)
这从值的末尾开始,从comboboxValue中获取Len(Id)-1个字符。Len(Id)返回Id的长度

Acces支持左、右和中

因此,您的查询将变成以下内容:

SELECT [Numéro Document (Sans Page)]
FROM [Documents]
WHERE RIGHT([ID],LEN([ID])-1) = ComboBoxValue

Access中不支持子字符串
Mid
是该功能的访问对应项

但我不确定你是否需要它。除非我误解了这个问题,否则您应该能够通过类似的比较得到您想要的

WHERE[ID]像“u”&[Forms]![你的表格]![YourCombo]&'=*'
如果要从ADO/OleDb运行查询,则需要另一个通配符

WHERE[ID]像“u”&[Forms]![你的表格]![你的组合]&'=%'
或者,您可以使用
Like
而不是
Like
,这样查询在任何上下文中都可以同样工作,而无需更改通配符

WHERE[ID]like'.'和[Forms]![你的表格]![你的组合]&'=%'

组合框值比我正在搜索的字段中的信息短。我不想剪切组合框(H-1234),我想剪切字段ID(_H-1234=00001)。comboboxValue也不是任何类型的变量,我之所以这样写是因为我稍后会在我的表单中将它更改为某个ComboxValue的值(如果可行的话)。我误读了你的帖子,在示例中犯了一个错误,更新了答案投票支持连续性,尽管我在上面找到了答案。谢谢啊好的。来自VBA的背景,我将mid改为SUBSTRING,这是因为我在网上读到,这是在SQL中实现的方法。。。另外,我在组合后使用了通配符“”,而不是“=”,因此它包含了H=123和H-1234这样的项目。谢谢你的完整回答,不客气。我刚想起来
[ID]
将以
\uu
开头,因此更新了答案。请注意,如果从ADO/OleDb或使用类似的
运行查询,则
\uuu
将被视为与任何单个字符匹配的通配符。但我猜这没问题,除非你有以其他字符开头的
[ID]
值,并且你不想匹配这些字符。是的,我自己已经修复了,因为它返回了所有内容。我也想知道我的组合的价值是什么,因为我似乎无法得到我想要的结果<代码>其中[ID]类似于“_”和[Forms]![f_Feuilleblue]![combobox 177]&'=*'
不返回任何内容,即使combobox的值应该返回大约100个文档。我想用combobox验证access认为我在查询什么。我怎么能做到?我看不出问题所在。您可以在即时窗口中检查组合的值:
Debug.Print[Forms]![f_Feuilleblue]![ComboBox177]
(您可以使用Ctrl+g转到即时窗口。)如果我从第二个通配符中删除=,它将非常有效。虽然我相信当我要求H-123时,这会使我面临拥有H-1234项目文件的风险,但我不明白为什么它不起作用。