Access sql选择From SUBSTRING = combobox.value

时间:2015-08-12 15:03:16

标签: sql ms-access

我想首先说明这是我第一天尝试使用SQL,我有大约5个小时的访问经验。考虑到答案中的任何歧义都会被误解。

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

项目标识为H-1234中的[Liste Projets]![Projet AHNS]_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"

只是为了看看我是否可以让SUBSTRING摆脱" _"。显然不是,我无法在线查找信息(也许我用错误的条款搜索)。谁能帮我吗?我最终想要

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的常规海报,但我不确定我的语法是否正常。

2 个答案:

答案 0 :(得分:1)

您可以使用

RIGHT(Id,LEN(Id)-1)

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

Acces支持Left,Right和Mid

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

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

答案 1 :(得分:1)

Access中不支持

SUBSTRINGMid是该函数的Access对应项。

但我不确定你在这里需要它。除非我误解了这个问题,否则你应该能够通过Like比较得到你想要的东西......

WHERE [ID] Like '_' & [Forms]![YourForm]![YourCombo] & '=*'

如果您要从ADO / OleDb运行查询,则需要使用不同的通配符...

WHERE [ID] Like '_' & [Forms]![YourForm]![YourCombo] & '=%'

或者您可以使用ALike代替Like,这样查询在任何上下文中的工作方式都相同,而不会更改通配符...

WHERE [ID] ALike '_' & [Forms]![YourForm]![YourCombo] & '=%'