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