Straat, huisnummer en huisnummertoevoeging uit adres halen

Het is soms nodig om uit een adresregel in Exact Online individueel de straatnaam, het huisnummer en de huisnummertoevoeging los te weken.

De volgende query gebruikt op basis van in landen gangbare schrijfwijzen een eenvoudig algoritme om in meer dan 90% van de gevallen een zinvolle gok te doen:

select addressline1
,      country
,      case
       when country in ('NL', 'BE', 'DE', 'PT', 'CH', 'DK', 'LT', 'IT', 'SE', 'ID', 'ES', 'AT', 'NO', 'CZ')
       then regexp_replace(trim(addressline1), '^(.*) ([0-9]+)(| )(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z])$', '$1')
       when country in ('FR', 'GB', 'US', 'SG', 'AU', 'CY', 'IE', 'CN', 'IN')
       then regexp_replace(trim(addressline1), '^([0-9]+)(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]) (.*)$', '$3')
       else ''
       end 
       street
,      case
       when country in ('NL', 'BE', 'DE', 'PT', 'CH', 'DK', 'LT', 'IT', 'SE', 'ID', 'ES', 'AT', 'NO', 'CZ')
       then regexp_replace(trim(addressline1), '^(.*) ([0-9]+)(| )(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z])$', '$2')
       when country in ('FR', 'GB', 'US', 'SG', 'AU', 'CY', 'IE', 'CN', 'IN')
       then regexp_replace(trim(addressline1), '^([0-9]+)(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]) (.*)$', '$1')
       else ''
       end 
       street_number
,      case
       when country in ('NL', 'BE', 'DE', 'PT', 'CH', 'DK', 'LT', 'IT', 'SE', 'ID', 'ES', 'AT', 'NO', 'CZ')
       then regexp_replace(trim(addressline1), '^(.*) ([0-9]+)(| )(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z])$', '$4')
       when country in ('FR', 'GB', 'US', 'SG', 'AU', 'CY', 'IE', 'CN', 'IN')
       then regexp_replace(trim(addressline1), '^([0-9]+)(|[a-zA-Z]|[a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z]|[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]) (.*)$', '$2')
       else ''
       end 
       street_number_addition
from   addresses@eol
where  addressline1 is not null