[英]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.