我有一个访问数据库,在其中我有一个包含多行文本的备注字段的表。这用于存储地址。我需要使用正则表达式来查找该备忘录字段中的邮政编码(在任何可能的行上),然后将其放入新列中。
这需要在select查询中使用,以相应地返回一组结果。
任何帮助表示感谢。
更新:样本数据
[地址备忘录栏]:
10街道
一个城镇
A县
DE14 1DJ
我需要将其拆分为
[地址备忘录栏]:
10街道
一个城镇
一个县
[PostCode列]:
DE14 1DJ
更新:
下面应该找到Postcode值,但我不知道如何将它应用于Select语句,另外在找到邮政编码后将值拆分到新字段中。
([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)
更新:更多信息
邮政编码并不总是备忘录字段中的最后一行,如下所示
[地址备忘录栏]:
10街道
一个城镇
DE14 1DJ
电话:01234567891
答案 0 :(得分:1)
此示例基于如下表格:
SELECT Table2.id,
IIf([Table2.Address] Is Null,Null,(Right([Table2.Address],Len([Table2.Address])-InStrRev([Table2.Address],Chr(13))-1))) AS PostCode,
IIf([Table2.Address] Is Null,Null,(Left([Table2.Address],InStrRev([Table2.Address],Chr(13))-1))) AS RestofAddress
FROM Table2;
给予:
此示例假定邮政编码位于最后一行,并且所有地址都有邮政编码。
答案 1 :(得分:0)
您真正想要做的是使用带有通配符的Instr
函数而不是固定字符串。
所以我写了一个自定义函数来做到这一点:
Public Function InstrEx(str As String, strCompare As String, LenStrCompare As Integer) As Integer
Dim i As Integer
For i = 1 To Len(str)
If Mid(str, i, LenStrCompare) Like strCompare Then
InstrEx = i
Exit Function
End If
Next
End Function
如果在SQL查询中调用此函数,您将获得邮政编码的位置。
类似的东西:
SELECT InStrEx([Address],"[A-Z][A-Z]## #[A-Z][A-Z]",8) AS Expr1
FROM Customers;
您可以编辑通配符字符串,以便仅包含邮政编码中每个位置的有效字符。
获得职位后,您只需使用Mid
解析地址字段,即可获得邮政编码。