Home / SQL Server / Postcodetabel van Nederlands + SQL Script
Nederlandse postcodetabel

Postcodetabel van Nederlands + SQL Script

Inleiding

De Nederlandse Postcodetabel bevat informatie over alle postcodes die in Nederland bekend zijn. Dit is erg handig als je meer informatie wilt over een bepaalde postcode zoals een geografische locatie of de plaats die bij een postcode hoort. We laten in dit artikel zien wat je met deze postcodes kunt doen.

Bron Nederlandse Postcodetabel

De bron van Nederlandse postcodes is het kadaster. Het kadaster levert via de site zogenaamde “BAG-bestanden”. Hierin zit informatie over woningen en gebouwen, onder andere de postcode maar nog veel meer interessante data. Deze bestanden moet je eerst bewerken voor je ze kunt gebruiken. Dit is behoorlijk ingewikkeld, eigenlijk niet te doen.  Ik adviseer je om het wiel niet zelf te gaan uitvinden maar een kant-en-klaar bestand te gebruiken. Er lopen initiatieven voor de data extractie maar jezelf hierin verdiepen kost veel tijd (tijd=geld). Ik werk zelf met een betaalde versie van de postcodetabel (adressenbestand) welke ruim 9 miljoen adressen bevat. Met deze data kun je de exacte locaties bepalen van je klanten omdat het adres met huisnummer uniek is. Kortom, ieder adres is een uniek record met aanvullende informatie zoals Lat/Lon, Provincie, plaats, etc.

Stel je hebt een klantrecord in je ERP systeem database met een postcode en adres. Door een INNER JOIN (koppeling, soort verticaal zoeken) te maken met de postcodetabel op basis van postcode + huisnummer + toevoeging kun je het record vinden dat erbij hoort. Vervolgens kun je uit het postcodebestand de coördinaten halen. He gave hiervan is: je weet nu waar in Nederland de klant zicht bevindt. Je kunt deze data in Excel tonen in Excel Maps maar ook in PowerBI. Ik moet zeggen, dit werkt echt fantastisch! Als je de 6 cijferige tabel gebruikt kun je ook coördinaten koppelen maar die zijn minder precies. Je kunt bijvoorbeeld analyses doen in welke gebieden van Nederland zich de meeste klanten bevinden. Nog interessanter kan zijn waar je nog geen klanten hebt!

Hoe werkt de SQL postcodetabel?

Iedere postcode in combinatie met de minimale en maximale huisnummer-range heeft een eigen rij in de tabel. Ook handig zijn de X-Y coördinaten, ook wel latitude/longitude genoemd. Ik heb met behulp van een SQL Functie direct de GeoLocation berekend zoals je in onderstaand SQL statement kunt zien.

De gratis postcodetabel tabel bevat in totaal 471.993 rijen dus het is een flink grote tabel. Met bijgevoegd SQL Script kun je in een keer alle data importeren in Microsoft SQL Server. Onderaan deze post vind je een download link, het SQL script. Let op dat dit bestand niet up-to-date is en < 2010 is. Ik adviseer je om de nieuwste postcodetabel aan te schaffen via postcodestore. Dit kost 249 euro en voorziet je in ruim 9 miljoen up-to-date rijen data. Het bestand wordt maandelijks ge-update dus je kunt ook later nog eens een nieuwe file aankopen. Er staan ook tutorials op de website hoe je de data komt inlezen.

Als je een beetje handig met SQL bent weet je natuurlijk wel hoe je met deze data om moet gaan. Ik zal binnenkort een artikel publiceren hoe je vanuit een tabel met een postcode/huisnummer de geografische gegevens kunt tonen, bijvoorbeeld in Excel Maps of Power BI.

Nederlandse postcodetabel animatie

Postcodetabel aanmaken

Onderstaande SQL voer je uit om de postcodetabel aan te maken. Vervolgens voer je het script in SQL server uit om de tabel te vullen met postcodes.

CREATE TABLE [dbo].[REF_Postcode_NL](
[id] [FLOAT] NULL,
[postcode] [nvarchar](255) NULL,
[postcode_id] [FLOAT] NULL,
[pnum] [FLOAT] NULL,
[pchar] [nvarchar](255) NULL,
[minnumber] [FLOAT] NULL,
[maxnumber] [FLOAT] NULL,
[numbertype] [nvarchar](255) NULL,
[street] [nvarchar](255) NULL,
[city] [nvarchar](255) NULL,
[city_id] [FLOAT] NULL,
[municipality] [nvarchar](255) NULL,
[municipality_id] [FLOAT] NULL,
[province] [nvarchar](255) NULL,
[province_code] [nvarchar](255) NULL,
[lat] [FLOAT] NULL,
[lon] [FLOAT] NULL,
[rd_x] [FLOAT] NULL,
[rd_y] [FLOAT] NULL,
[location_detail] [nvarchar](255) NULL,
[changed_date] [datetime] NULL,
[geographypoint] AS ([geography]::STGeomFromText(((('POINT('+CONVERT([VARCHAR](20),[lon],(0)))+' ')+CONVERT([VARCHAR](20),[lat],(0)))+')',(4326)))
) ON [PRIMARY]

Data verrijken Postcodetabel met Excel 

Wat je me de postcodetabel kunt doen is data op de kaart laten zien. Zo kun je met de eerste vier cijfers van de postcode data in Excel op de kaart tonen via Power Maps. Deze Power Maps zit gratis in Excel vanaf versie 2013. In dit artikel bespreken we hoe je dit kunt doen. Dit artikel bevat een aantal praktische voorbeelden met Excel en SQL.

Conclusie

De postcodetabel van Nederland is een handige tabel. Je kunt ervoor zorgen dat datainvoer eenvoudiger wordt, data mee verrijken of data op de kaart laten zien. Om meer te weten te komen over postcodetabellen en data analyse kun je de overige artikelen over dit onderwerp lezen.

Check Also

Linked Server – Why and how use them!

A linked server is used to connect to another (remote) database or file (Xls, CVX) …

23 comments

  1. Wat is je bron. Mogen we updates verwachten. Dit is verweg de meest bruikbare tabel die ik gevonden heb.
    Ga hem zeker proberen.

  2. hi Ronald, je code geeft bij mij de nodige fouten – (punctuation error)

  3. deze melding; bekend?

    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘AS (geography::STGeomFromText((((‘POINT(‘+CONVERT(VARCHAR(20),lon,(0)))+’ ‘)+CON’ at line 23

  4. ah.. dat verklaart een hoop. je hebt zeker geen mysql versie liggen;)?

  5. Plaatsnamen zijn vernacheld, kijk bijv. maar eens naar ‘1e Ex’.Half Friesland gebruikt ook stomme tekens in hun plaatsnamen en zijn ook allemaal incorrecte encoding weggeschreven. Gelukkig is het eenvoudig genoeg met een search & replace te repareren, want consistent.

  6. Ik zoek eigenlijk gewoon een mogelijkheid om een grote tabel met postcodes gekoppeld aan huisnummer (ranges) en plaatsnaam. In het formaat van:

    postcode | huisnummer (range) | plaatsnaam

    voorbeeld (fictief):

    3200AB | 1 – 100 | Rotterdam

    Deze tabel zou ik het liefst in Excel in kunnen lezen (dus CSV formaat of xlsx).
    Is er iemand die mij kan vertellen hoe dit te doen?

  7. Je bent geweldig! Hier heb ik wat aan! Eens kijken of dit ook fijn kan samenwerken met open street maps of google maps 😉

  8. Mooie tabel, maar ik krijg het script niet gedraaid in visual studio of SSMS, in beide gevallen krijg ik een melding over Memory en execute geeft ´query completed with errors´ zonder verder bericht.

    Iemand tips hoe ik dit moet doen?

  9. Beste allemaal.
    Ik heb de excel gedownload
    deze vervolgens als csv bestand opgeslagen
    in foxpro met import de import wizard gebruikt en nu is het een postcode.dbf .

  10. Top, vriendelijk bedankt! Precies wat ik zocht, ook met lengte- en breedtegraad.

    Exporteren naar CSV is in de meeste gevallen de beste optie. Mysql en Postgres kunnen CSV’s importeren.

    Hup & hop 🙂

  11. Hi Ronald,

    Ten eerste ongelooflijk bedankt voor deze dataset. Heel erg leuk en interessant.
    Ik liep alleen tegen een klein foutje aan. Er zitten bepaalde Latitude Longitude coordinaten verkeerd in.
    Voorbeeld: er zijn meerdere nederlandse plaatsen met een lat =< 49. Echter is het zuidelijkste puntje van Nederland boven de 50 lat. Is er een manier dit op te lossen? Of zal ik handmatig alles langs moeten gaan?

    Alvast bedankt!

    Renier

    • Jillis Eikelenboom

      Dezelfde fout constateerde ik ook, nadat ik de excel eerst als csv in PostgreSQL had ingelezen en daarna in QGIS had gevisualiseerd. Ook liggen er een aantal postcodes in Vlaanderen en in het IJsselmeer.

  12. Handig artikel! Ik heb zelf ook die adressentabel gekocht en met je andere artikel heb ik de data nu ook in excel kunnen visualiseren.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.