0

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

这需要在选择查询中使用以相应地返回一组结果。

任何帮助表示赞赏。

更新:示例数据

【地址备注栏】:
10街
A镇
A县
DE14 1DJ

我需要将其拆分为

【地址备注栏】:
10街
A镇
A县

【邮编栏目】:
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 The Street
A Town
DE14 1DJ
电话:01234567891

11 The Street
DE14 1DJ
电话:01234567891
abcdefg

11 The Street
DE3 1DJ
电话:01234567891
abcdefg

4

2 回答 2

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;

给出:

在此处输入图像描述

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

于 2013-06-28T15:32:52.080 回答
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并且你有你的邮政编码。

于 2013-06-30T09:08:42.593 回答