【问题标题】:Access SQL Query to split out the Postcode from memo field into new column访问 SQL 查询以将邮政编码从备注字段拆分为新列
【发布时间】:2013-06-26 08:15:17
【问题描述】:

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

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

任何帮助表示赞赏。

更新:示例数据

[地址备注栏]:
10 街
一个小镇
A县
DE14 1DJ

我需要将其拆分为

[地址备注栏]:
10 街
一个小镇
某县

[邮政编码栏]:
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

【问题讨论】:

  • 这正是数据的存储方式,还是地址的每一行都用 , 或 ^ 等字符分隔??此外,这篇文章stackoverflow.com/questions/8844796/… 完全符合您的要求,它只是拆分地址而不仅仅是邮政编码
  • 它的存储方式如上(用回车/换行符分隔.... chr(13))。我已经有一个函数可以将备忘录字段的单独行拆分为新列。如果邮政编码在第 2 行,它会被放入第 2 列,但我需要专门查找邮政编码值(可以是第 2 行,也可以是上面示例中的第 4 行)并将其放入指定字段。跨度>

标签: sql regex vba ms-access select


【解决方案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;

给予:

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

【讨论】:

  • 谢谢,这很有帮助,但不幸的是,它并不能完全满足我的需要。忘了提到邮政编码可能不会出现在某些记录中,也可能不是备注字段中的最后一行。对不起。
【解决方案2】:

您真正想要做的是使用带有通配符而不是固定字符串的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 并获得您的邮政编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多