簡體   English   中英

訪問SQL查詢以將備忘錄字段中的郵政編碼拆分為新列

[英]Access SQL Query to split out the Postcode from memo field into new column

我有一個訪問數據庫,並且在其中有一個表,該表包含帶有多行文本的備注字段。 這用於存儲地址。 我需要使用正則表達式在該備忘字段中找到郵政編碼(可能在任何行上),然后將其放入新列中。

需要在選擇查詢中使用它來相應地返回一組結果。

任何幫助表示贊賞。

更新:樣本數據

[地址備注欄]:
10街
一個城鎮
一個縣
DE14 1DJ

我需要將其拆分為

[地址備注欄]:
10街
一個城鎮
一個縣

[PostCode欄]:
DE14 1DJ

更新:

下面應該找到郵政編碼值,但是我不知道如何將其應用於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

本示例基於如下表格:

在此處輸入圖片說明

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;

得到:

在此處輸入圖片說明

本示例確實假定郵政編碼在最后一行,並且所有地址都具有郵政編碼。

您真正想做的是將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解析“地址”字段,即可獲得郵政編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM