Search code examples
sqldatabasems-accessstandards

Address standardization within a database


Working in MS Access 2013. Have a ton of locations/addresses which need to be standardized.

Examples include addresses like:

  • 500 W Main St
  • 500 West Main St
  • 500 West Main Street

You get the point.

I've considered running a query that pulls all records where the left(7) or something characters exist more than once in the database, but there are obvious flaws in that logic.

Is there a function or query or anything else that would help me generate a list of records whose addresses may exist multiple times, in slightly different fashions?


Solution

  • This is a tricky business ... equal parts Black Magic and Science. You will be amazed at the variations of Boulevard alone.

    This is why I use the Google API. It can be time consuming, for the initial data-set, but only new adds would need to be resolved.

    For example

    https://maps.googleapis.com/maps/api/geocode/json?address=500 S Main St,Providence RI 02903
    

    returns, in part

    "formatted_address" : "500 S Main St, Providence, RI 02903, USA"
    

    and the GOOD News is

    https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903
    

    returns the same formatted address as the previous query

    "formatted_address" : "500 S Main St, Providence, RI 02903, USA"
    

    VBA Example:

    Upon executing the following code ...

    ' VBA project Reference required:
    ' Microsoft XML, v3.0
    
    Dim httpReq As New MSXML2.ServerXMLHTTP
    httpReq.Open "GET", "https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903", False
    httpReq.send
    Dim response As String
    response = httpReq.responseText
    

    ... the string variable response contains the following JSON data:

    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "500",
                   "short_name" : "500",
                   "types" : [ "street_number" ]
                },
                {
                   "long_name" : "South Main Street",
                   "short_name" : "S Main St",
                   "types" : [ "route" ]
                },
                {
                   "long_name" : "Fox Point",
                   "short_name" : "Fox Point",
                   "types" : [ "neighborhood", "political" ]
                },
                {
                   "long_name" : "Providence",
                   "short_name" : "Providence",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Providence County",
                   "short_name" : "Providence County",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "Rhode Island",
                   "short_name" : "RI",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "United States",
                   "short_name" : "US",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "02903",
                   "short_name" : "02903",
                   "types" : [ "postal_code" ]
                },
                {
                   "long_name" : "2915",
                   "short_name" : "2915",
                   "types" : [ "postal_code_suffix" ]
                }
             ],
             "formatted_address" : "500 S Main St, Providence, RI 02903, USA",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 41.82055829999999,
                      "lng" : -71.4028137
                   },
                   "southwest" : {
                      "lat" : 41.8204014,
                      "lng" : -71.40319219999999
                   }
                },
                "location" : {
                   "lat" : 41.8204799,
                   "lng" : -71.40300289999999
                },
                "location_type" : "ROOFTOP",
                "viewport" : {
                   "northeast" : {
                      "lat" : 41.8218288302915,
                      "lng" : -71.40165396970851
                   },
                   "southwest" : {
                      "lat" : 41.8191308697085,
                      "lng" : -71.40435193029151
                   }
                }
             },
             "partial_match" : true,
             "place_id" : "ChIJicPQAT9F5IkRfq2njkYqZtE",
             "types" : [ "premise" ]
          }
       ],
       "status" : "OK"
    }