Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 4.462 pregleda

Najnovija ↓

Trenutno VREME u sql-u 12.09.2008. u 07:40 · pre 220 meseci #1
Imam sledeci problem: U firmi u kojoj radim postoji Sistem za evidenciju radnog vremena (registruju se dolasci i odlasci radnika). Jedan od mojih zadataka je da u odredjeno vreme (recimo u 9 sati) javim koliko je radnika doslo na posao za taj dan (od 00:00 sati do gore navedenih 9 sati). Ja to radim sa sledecim uslovom (DT je kolona sa registrovanim vremenima):

WHERE DT BETWEEN '09/12/2008' AND GETDATE()

Zanima me (za ovaj primer ali i inace) sta da uradim da ne moram rucno ispravljati svaki novi dan prvo vreme ( '09/12/2008' u ovom slucaju). Odnosno kako da dobijem trenutni datum ali da vreme bude '00:00' (nesto kao getdate()- 'trenutno vreme'='danasnji datum' i '00:00' - vreme).

Nadam se da nisam previse iskomplikovao. Unapred hvala.
Re: Trenutno VREME u sql-u 12.09.2008. u 09:34 · pre 220 meseci #2
Recimo ovako:
WHERE DT BETWEEN Cast((Left(GetDate(), 11) + ' 00:00:000') AS DateTime) AND GETDATE()
mada slobodno mozes i ovako:
WHERE DT > Cast((Left(GetDate(), 11) + ' 00:00:000') AS DateTime)
Re: Trenutno VREME u sql-u 12.09.2008. u 14:43 · pre 220 meseci #3
Ako startujes istog dana u isto vreme onda mozes slobodno i da uzmes brze numericko resenje koje ne zavisi od parsiranja stringova:

WHERE DATEDIFF(day, DT, GETDATE()) = 0

a ako imas index na DT mozes i da ubrzas stvar sa

WHERE DT > CAST(DATEDIFF(day, 0, GETDATE()) as DATETIME)

oba resenja su cisto numericka, s tim sto je drugo resenje konstanta za query scope i omogucava brz scan tabele jer ce query optimizer to da provali.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Trenutno VREME u sql-u 15.09.2008. u 15:10 · pre 220 meseci #4
@Brankec:
mmix ti je dao dobar odgovor. I resenje koje je dao Branko_S verovatno bi radilo, ali nisam siguran da bi radilo za svaki regional setting.

Moguce je da nije bas najjasnije na prvi pogled sta se desava. Pogledaj ovo parce koda i bice ti jasnije kako se iz nekog datuma 'odesca' vremenska komponenta. Ima vise nacina da se odsece vrema ili podesi tacno vreme, pokazan je jedan od njih i nacin koji je dao mmix.

Code:

-- GetDate, datum  bez vremena, 9 sati na danasnji dan
SELECT 
[TrenutnioVreme]= Getdate() 
-- mmix nacin, veoma elegantan:
, [DanasnjiDatum_mmix] = CAST(DATEDIFF(day, 0, GETDATE()) as DATETIME)
, [DanasnjiDatum_9AM_mmix] = dateadd( hh, 9, CAST(DATEDIFF(day, 0, GETDATE()) as DATETIME))
-- jos jedan moguci nacin, manje elegantan, cisto da se setimo i fuknicje CONVERT:
, [DanasnjiDatumBezVremena] = CAST(CONVERT(varchar,Getdate() , 112) AS Datetime)
, [DanasnjiDatum_9AM] = dateadd( hh, 9, CAST(CONVERT(varchar,Getdate() , 112) AS Datetime))


Ako je ovo jasno, onda bi tvoj kod trebalo da izgleda nekako ovako, koristeci izraze koje je dao mmix (jer su kraci nego moji):

Code:

SELECT Radnik, DT FROM TvojaTabela
WHERE 
-- za danasnji dan:
CAST(DATEDIFF(day, 0, DT) as DATETIME) = CAST(DATEDIFF(day, 0, GETDATE()) as DATETIME)
-- ko se otkucao do 9 AM zakljucno:
AND DT<= dateadd( hh, 9, CAST(DATEDIFF(day, 0, GETDATE()) as DATETIME))


:-)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme