访问SQL查询以将邮政编码从备注字段拆分为新列

时间:2013-06-28 14:11:17

标签: sql regex vba ms-access select

我有一个访问数据库,在其中我有一个包含多行文本的备注字段的表。这用于存储地址。我需要使用正则表达式来查找该备忘录字段中的邮政编码(在任何可能的行上),然后将其放入新列中。

这需要在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

11街道 DE14 1DJ
电话:01234567891
ABCDEFG

11街道 DE3 1DJ
电话:01234567891
ABCDEFG

2 个答案:

答案 0 :(得分:1)

此示例基于如下表格:

enter image description here

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;

给予:

enter image description here

此示例假定邮政编码位于最后一行,并且所有地址都有邮政编码。

答案 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解析地址字段,即可获得邮政编码。