Hvis du ikke har nogen over 100 år så er det nemt.
Prøv den her:
CREATE FUNCTION udf_age(@birthday_string CHAR(10)) RETURNS INTEGER AS BEGIN DECLARE @birthday AS DATETIME IF CONVERT(INTEGER, '20' + SUBSTRING(@birthday_string,5,2)) <= YEAR(GETDATE()) SET @birthday = CONVERT(DATETIME, '20'+SUBSTRING(@birthday_string,5,2)+SUBSTRING(@birthday_string,3,2)+SUBSTRING(@birthday_string,1,2), 112) ELSE SET @birthday = CONVERT(DATETIME, '19'+SUBSTRING(@birthday_string,5,2)+SUBSTRING(@birthday_string,3,2)+SUBSTRING(@birthday_string,1,2), 112) RETURN YEAR(GETDATE())-YEAR(@birthday)-CASE WHEN DATEPART(dy,GETDATE())<DATEPART(dy,@birthday) THEN 1 ELSE 0 END END GO
Alternativt kan du trække deres FOEDSELSDAG ud som en datetime og gøre noget ala følgende:
CASE WHEN month([FOEDSELSDAG]) = month(getdate()) then case when day([FOEDSELSDAG]) <= day(getdate()) then year(getdate()) - year([FOEDSELSDAG]) else year(getdate()) - year([FOEDSELSDAG]) - 1 end WHEN month([FOEDSELSDAG]) > month(getdate()) then year(getdate()) - year([FOEDSELSDAG]) - 1 ELSE year(getdate()) - year([FOEDSELSDAG]) END AS [ALDER]
Jeg plejer at bruge en DateDiff("d", fod_dato, now) / 365.15 Det passer ikke helt 100%, men er ret tæt på. Har prøvet med DateDiff("y"... men den runder vist altid op eller noget (den kunne i hvert fald ikke bruges sidst jeg eksperimenterede).
Men pepsdks forslag ser også interessant ud. Det vil jeg prøve at sætte ind på nogle af mine sites.
Personnummer (cpr-nummer) En virksomhed må kun behandle dit personnummer, når det følger af lovgivningen eller hvis du udtrykkeligt har givet dit samtykke. Oplysninger om dit personnummer må også videregives, når videregivelsen er et naturligt led i den normale drift og er af afgørende betydning for en entydig identifikation af dig.
Du skal ikke oplyse dit personnummer, hvis ikke det er nødvendigt for virksomheden. - Og det er det f.eks. ikke for en videoudlejningsbutik.
Mange virksomheder vil anvende det som en nøgle og det er en unik måde at kunne samle mange personoplysninger om dig på en let og overskuelig måde.
Da personnummeret åbner for mange personoplysninger er der en høj risiko for, at dine oplysninger kan blive misbrugt. Du skal derfor altid tænke dig om, inden du oplyser dit personnummer.
fandt denne udf (du skal kun sende de første 10 tegn til funktionen=
CREATE FUNCTION GetAge
/*
Version 1.1
This function returns the age of a person, in years, for a given date of birth. Due to the limitations placed on using the GETDATE() function within user-defined functions, todays date also needs to be supplied.
***********Created by Karl Grambow. karlgrambow@hotmail.com.*************
*/ (@DateOfBirth datetime, @Today datetime) RETURNS int AS BEGIN
DECLARE @Age int --Age in years.
SET @Age = YEAR(@Today) - YEAR(@DateOfBirth)
IF MONTH(@DateOfBirth) > MONTH(@Today) BEGIN SET @Age = @Age - 1 END
IF MONTH(@DateOfBirth) = MONTH(@Today) BEGIN IF DAY(@DateOfBirth) > DAY(@Today) BEGIN SET @Age = @Age - 1 END END
men der kommer stadig den samme fej meddelse som er:
Msg 156, Level 15, State 1, Procedure udf_age, Line 6 Incorrect syntax near the keyword 'ELSE'
koden ser sådan her ud nu:
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[udf_age](@birthday_string char(11)) RETURNS INTEGER AS BEGIN IF @birthday_string = '0000000000'
ELSE
DECLARE @birthday AS DATETIME IF CONVERT(INTEGER, '20' + SUBSTRING(@birthday_string,5,2)) <= YEAR(GETDATE()) SET @birthday = CONVERT(DATETIME, '20'+SUBSTRING(@birthday_string,5,2)+SUBSTRING(@birthday_string,3,2)+SUBSTRING(@birthday_string,1,2), 112) ELSE SET @birthday = CONVERT(DATETIME, '19'+SUBSTRING(@birthday_string,5,2)+SUBSTRING(@birthday_string,3,2)+SUBSTRING(@birthday_string,1,2), 112) RETURN YEAR(GETDATE())-YEAR(@birthday)-CASE WHEN DATEPART(dy,GETDATE())<DATEPART(dy,@birthday) THEN 1 ELSE 0 END END
arne... du skal huske END /o) ellers stopper det aldrig ;o))))
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.