我想首先说明这是我第一天尝试使用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的常规海报,但我不确定我的语法是否正常。
答案 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)
SUBSTRING
。 Mid
是该函数的Access对应项。
但我不确定你在这里需要它。除非我误解了这个问题,否则你应该能够通过Like
比较得到你想要的东西......
WHERE [ID] Like '_' & [Forms]![YourForm]![YourCombo] & '=*'
如果您要从ADO / OleDb运行查询,则需要使用不同的通配符...
WHERE [ID] Like '_' & [Forms]![YourForm]![YourCombo] & '=%'
或者您可以使用ALike
代替Like
,这样查询在任何上下文中的工作方式都相同,而不会更改通配符...
WHERE [ID] ALike '_' & [Forms]![YourForm]![YourCombo] & '=%'