Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izracunati godine starosti ?

[es] :: MS SQL :: Kako izracunati godine starosti ?

[ Pregleda: 15804 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-4.sezampro.yu.



+1 Profil

icon Kako izracunati godine starosti ?17.01.2008. u 11:06 - pre 198 meseci
e, ovako, potrebno mi je da izracunam starosti kandidata , i da ih selektujem u zavisnosti od godina.

Na primer: na formi za pretragu se unese u tekst box broj 35, i onda kad kliknem na Submit, u stored proceduri, treba da dobijem samo kandidate koji imaju do 35 godina zivota. Probao sam sa :: DATEDIFF (yy, DatumRodjenja, GETDATE()) , ali ne ide.
na netu sam gledao, gomile nekog koda, ali nista nisam nasao da moze u jednoj liniji da se resi, a , problem je u tome, sto su godine starosti jedan od uslova, u Searchu, pa me zanima, kako biste ovo najelegantnije resili

SELECT *
FROM [dbo].[Kandidat]

WHERE (@KandidatIme IS null OR [KandidatIme] LIKE @KandidatIme + '%')
AND (@KandidatPrezime IS null OR [KandidatPrezime] LIKE @KandidatPrezime + '%')
AND (@GodineZivota IS null OR [DatumRodjenja] < @GodineZivota) < OVDE TREBA UBACITI USLOV ZA STAROST ?
AND (@KljucnaRec IS null OR [KratakOpisPoslova] LIKE @KljucnaRec + '%')

Hvala unapred i pozdrav
 
Odgovor na temu

M E N E
borislav
Temerin

Član broj: 30434
Poruke: 231
*.nspoint.net.



+1 Profil

icon Re: Kako izracunati godine starosti ?17.01.2008. u 12:14 - pre 198 meseci
Zavisi koji tip podataka ti je DatumRodjenja i @GodineZivota
Ako je DatumRodjenja DateTime, ili SmallDateTime od njega mozes lako dobiti koja je godina sa funkcijom YEAR()
Dakle, najbolje bi bilo da baratas sa datumima, da broj godina primas kao int i onda moze taj red da izgleda ovako:

AND (@GodineZivota IS null OR (YEAR(getdate()) - YEAR(DatumRodjenja)) <= @GodineZivota)

getdate() ti vraca trenutno vreme, naravno
e, sada, ne verujem da zelis da trazis da li je coveku prosao rodjendan ove godine :-)

Uhvatili ste me nespremnog
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?18.01.2008. u 21:44 - pre 198 meseci
Citat:
e, sada, ne verujem da zelis da trazis da li je coveku prosao rodjendan ove godine


U tome i jeste ceo stos. Inace bi bilo suvise prosto, DateDiff pa trazi razliku u godinama. Sve i da nije trazeno, kako bi se ovo resilo? Ajde mala mozgalica, veoma lakog kalibra.

 
Odgovor na temu

KizaBG
programer

Član broj: 169491
Poruke: 247
*.adsl-4.sezampro.yu.



+1 Profil

icon Re: Kako izracunati godine starosti ?19.01.2008. u 00:42 - pre 198 meseci
@MENE: hvala puno. Ovako radi ! .. mislim, radi i DateDIff, ali sam citao na NET-u, da ume da pobrljavi malo :)

inace, samo mi treba broj, znaci ne meseci, ne dani .. vec kad kazem: daj mi sve kandidate koji imaju manje od 45 godina,
da mi se to izlista.

pozdrav i hvala puno
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?21.01.2008. u 14:27 - pre 197 meseci
Evo ovako. Neko je rodjen 10 marta 1960. Koliko godina ta osoba ima na danasnji dan (21 Januar 2008)
Da li je covek star 2008-1060 = 48 godna, ili 47, jer ce 48 biti tek desetog marta?

Ima li odgovora na mozgalicu, kako tacno izracunati neciju starost u godinama, uzimajuci u obzir rodjendan? Tako da za nekoga ko je rodjen 10 marta 1960 na danasnji dan, 21 Januar 2008, rezultat bude 47 a ne 48.

:-)
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?22.01.2008. u 17:48 - pre 197 meseci
Niko ne ume ili nije zaintersovan da pokaze kako se racuna starost, uzimajuci rodjendan u obzir? Ne modu da verujem.
 
Odgovor na temu

sparc
Sladjan Parc

Član broj: 65760
Poruke: 134
91.150.127.*



Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 07:19 - pre 197 meseci
Nista od ugradjenih funkcija ne odgovara rucnom nacinu racunanja starosti,
jedino da napravis funkciju koja ti vraca string u obliku uu/mm/yy a kojoj
saljes parametre datum rodjenja i datum posmatranja.
u funkciji oduzimas prvo dane od dana, pa mesece od meseca, pa godine od
godina, za ovo racunanje podrazumevano je da je mesec od 30 dana, pa
je mogucnost greske od 1 dana.
I ovde je moguce doskociti trebao bi da posmatras i mesec za datum posmatranja
narocito za ljude koji su rodjeni 29.02. neke godine.
Pitanje je koje se mora resiti sledece:
da li je covek koji je rodjen 30.03.1963 da dan 30.03.2008 star
45/00/00 ili 45/00/01 u formatu yy/mm/dd , ovde nema generalnih resenja.

 
Odgovor na temu

M E N E
borislav
Temerin

Član broj: 30434
Poruke: 231
*.nspoint.net.



+1 Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 07:35 - pre 197 meseci
pa, kao sto sam gore koristio YEAR()
mogu koristiti i DAY() i MONTH(), pa da poredimo.
dakle, ako sa tim funkcijama raslojim datum rodjenja na r.dan, r.mesec. r.godina, a sadasnje vreme je s.dan, s.mesec, s.godina
onda ih poredim
Mrzi me da kucam sada kod ovde; s druge strane, mozda je previse proceduralno, ali odradice posao, sigurno :-)
Uhvatili ste me nespremnog
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
212.200.214.*

Jabber: DarkMan


Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 14:42 - pre 197 meseci
Evo u jednoj liniji godina starosti pa ko hoce neka napravi fuknciju:

Code:

declare @datumRodjenja datetime, @datum datetime
set @datumRodjenja = '1979-01-23'
set @datum = '2008-01-23'

select year(@datum)-year(@datumRodjenja)+(case when @datumRodjenja < convert(datetime,ltrim(year(@datumRodjenja))+right(convert(varchar,@datum,120),len(convert(varchar,@datum,120))-4)) then -1 else 0 end)


Kratko objasnjenje: oduzmemo godine danasnjeg datuma i datuma rodjenja, dobijemo uvek broj godina kao da nam je vec bio rodjendan, e onda danasnjem datumu zemenimo godinu sa godinom iz datuma rodjenja i poredimo ga sa datumom rodjenja, ako je dobijeni datum manji od datuma rodjenja onda oduzmemo jednu godinu
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 14:54 - pre 197 meseci
Pazite, pitanje glasi: Koliko godina ima osoba u datom momentu. Znaci, ulazni podaci su [posmatrani trenutak] i [datum rodjenja].

Oduzimanje Year(posmatran trenutak) - Year(datum rodjenja) daje tacan rezultat samo ako [posmatrani trenutak] pada posle rodjendana. Ako [posmatrani trenutak] pada pre rodjendana, osoba ima (Year(posmatran trenutak) - Year(datum rodjenja) - 1) godinu.

Zaista, ako je [posmatrani trenutak] = '23 Januar 2008' a [datum rodjenja] = '10 Mart 1960' onda osoba ima na dan 23 Januara 2008 47 godina a ne 48. 48 godina ce imati od 10. Marta 2008, pa sve do 9 Marta 2009. 10 Marta 2009 osoba ce imati 49 godina. 9 Marta 2009 imace jos uvek 48.

Zasto je problem da se ovo iskaze SELECT zrazom? Napisite mi taj izraz, u formatu

Code:

DECLARE @PosmatraniTrenutak AS datetime
DECLARE @DatumRodjenja AS datetime

SET @PosmatraniTrenutak = GetDate()
SET @DatumRodjenja = '19600310'  -- ovo je YYYYMMDD format

SELECT 
@PosmatraniTrenutak AS [Posmatrani trenutak] 
, @DatumRodjenja  AS [datum Rodjenja]
Starost = ........



Dovrsite SELECT . Ako ovo uspe, onda je moguce napisati ovakav kveri:
Code:
SELECT Z.DatumRodjenja, GetDAte() AS DanasnjiDatum, Starost = ......
FROM Zaposleni AS Z


Verjem da u praksi ponekda pritreba ovako nesto



 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 15:59 - pre 197 meseci
Nisam video da me Darkman preduhitrio. Cestitam. Njegov kod prati logiku, ali ima sitnu gresku. Ako je posmatrani datum posle rodjendana, njegov kod oduzima jednu godinu. Treba obratno. Moze li neko da nadje gde je greska?

Meni izgleda da je greska rezultat loseg testiranja. testirano je sa granicnim slucajem, posmatrani datum = rodjendan. Da je testirano sa dva datuma, pre i posle rodjendana greska bi bila uhvacena.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 16:11 - pre 197 meseci
Moze i ovako:
Code:

DECLARE @datumRodjenja datetime, @datum datetime
SET @DatumRodjenja = '19600310'    -- 10 Mar 1960
--SET @Datum = '20080215'        -- 15 feb 2008 => 47 godina
SET @Datum = '20080401'            -- 1 April, posle rodjendana => 48
--SET @Datum = '20080310'    -- tacno na rodjendan => na rodjendan napunis sledecu godinu => 48

SELECT 
@Datum AS [Posmatrani Datum]
, @DatumRodjenja AS [datum Rodjenja]
, Starost = 
YEAR(@Datum) - Year(@DatumRodjenja)
+            --- sad oduzmemo jednu godinu ako treba
CASE
WHEN (MONTH(@Datum) * 10 + DAY(@Datum)) < (MONTH(@datumRodjenja) * 10 + DAY(@datumRodjenja))
    THEN -1
    ELSE 0 
END


Testirano sa tri datuma; preprodjendana, posle i na sam dan rodjendana, MS SQL.

 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
212.200.214.*

Jabber: DarkMan


Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 18:12 - pre 197 meseci
Pogresio sam u kodu, mesto manje treba vece (cudno ali objasnjenje sam napisao kako treba).
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
212.200.214.*

Jabber: DarkMan


Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 18:19 - pre 197 meseci
Citat:
Zidar: Moze i ovako:
Code:

...
CASE
WHEN (MONTH(@Datum) * 10 + DAY(@Datum)) < (MONTH(@datumRodjenja) * 10 + DAY(@datumRodjenja))
THEN -1
ELSE 0 
END
...



Ne valja ni ovo :) Ne mozes mnoziti sa 10, moras bar sa 31. Evo ovi podaci ce ti dati pogresan rezultat (daje 48 a treba 47 godina):
Code:

SET @DatumRodjenja = '1960-05-10'
SET @Datum = '2008-04-20'
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Kako izracunati godine starosti ?23.01.2008. u 21:39 - pre 197 meseci
Hvala na ispravci Odlicno zapazanje. Tacno, treba da se mnozi bar sa 31.

Pitam se da li bi decimalni oblik pomogao, bez mnozenja, Mesec + Dan/100, pa bi za mesec=5 i dan = 25 bilo 5.25. Samo razmisljam.

 
Odgovor na temu

[es] :: MS SQL :: Kako izracunati godine starosti ?

[ Pregleda: 15804 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.