webForumDet fria alternativet

Räkna ut ålder utifrån personnummer

Databaser & SQL

4 svar · 2 362 visningar · startad av Troxy

Medlem sedan mars 20041 505 inlägg
Frågan#1

Hej, jag vill räkna ut ålder på personer med hjälp av deras personnummer.
Alla personnummer ligger som strängar och ser såklart ut såhär: ÅÅMMDD-XXXX
Version som används: MySQL 4.1.11
Jag har nästan en fungerande lösning, som ser ut såhär:

SELECT YEAR(CURDATE())-YEAR(DATE(SUBSTRING(persnum,1,6)))as age FROM tblmembers

Problemet är att DATE()-funktionen inte riktigt funkar i detta fall. Den konverterar DATE('690910') till 2069-09-10.

Hur gör jag för att lägga till '19' i början på alla personnummer?
Eller har någon en annan lösning på detta?

Mvh

Medlem sedan juli 20033 147 inlägg
#2

Varför lagrar du inte personnummret med 0000-00-00 00:00:00?

/r Mitt tips: Gör om formateringen så att det sparas som jag skrev ovan. Sen byter du datatyp till datetime.
Sedan är det väl enklast att köra uträkningen av ålder med script-språket (ASP/PHP osv).

Medlem sedan mars 20041 505 inlägg
#3

Melea, men då är det inte ett personnummer längre, utan ett datum och klockslag ;)

Nåja, nu verkar det fungera lite bättre. Jag gjorde om hela uttrycket:

SELECT FLOOR((DATEDIFF(CURDATE(),DATE(CONCAT('19',SUBSTRING(persnum,1,6))))/365.25))as age FROM tblmembers

Tack och hej!

Medlem sedan juli 20033 147 inlägg
#4

Ska nog sluta svara i webbutveckling/programmerings-forumen på morgonkvisten och kvällen/natten. ;)

Medlem sedan okt. 20041 556 inlägg
#5

Om du måste använda de fyra sista i p-numret så är det bättre att dela upp det i två delar. Födelsedatan i ett datumfält och de sista i ett integer-fält. Då kan du använda datumfunktioner i stället för strängfunktioner för att extrakta åldern.

SELECT FLOOR(DATEDIFF(curdate(),fodelsedatumet)/365.25) AS age FROM tblmembers
251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)