Newsgroup: it.comp.software.database
Titolo: Consiglio campi Time

Ciao a tutti,
devo riscrivere un sw di gestione del personale, ora entrata / uscita,
permessi ecc.
La struttura delle tabelle già ce l'avrei (era su file), quindi vorrei
sapere se per il DB mi merita usare dei campi Time.
Io non credo ci siano problemi
Uso Firebird che si comporta nel seguente modo:
CAMPO_TIME + - Numerico --> Restituisce tipo Time (agg./sottrai dal time il
numerico (come secondi)
CAMPO_TIME - CAMPO_TIME --> Restituisce tipo Numerico in secondi della
differenza
Ho anche qualche "ore aggiuntive" ecc. che non so se impostare come Time
(la somma fra Time non permette di farla) però una cosa del genere non
funziona:
select MY_TIME + cast(MY_TIME2 as numeric(18,9))
Ma dovrei fare tipo 
"Extract (second from MY_TIME2) + 60* Extract (hour from MY_TIME2)"
Che mi consigliate?
Grazie a tutti

 Ciao a tutti,
 > .... CUT ...
Ciao :)
Io per un programma simile ho usato TIMESTAMP x segnare entrate ed 
uscite in quanto si poteva entrare alle 18.00 e uscire alle 02.00 del 
giorno dopo, campi TIME x segnare eventuali straordinari o bonus e ore 
totalizzate nel turno lavorativo, ho dovuto fare qualche extract ma in 
generale tutto ha funzionato alla perfezione sia nei vari Trigger che 
nelle StoreProc
Saluti Goblin
-- 
Ibis et redibis non morietur in bellum.

 Ibis et redibis non morietur in bellum.
chi (non) morira'? :)
"Ibis redibis non morieris in bello"
ciao, a.

 giorno dopo
Il timestamp in questo caso credo sia obbligatorio.
Unica cosa mi da 3.99999 se faccio due campi uno impostato a 
TSB= 01/02/2007 19:00.00
TSA= 01/02/2007 15.00.00
select TSB-TSA
from PROVA
Mi restituisce 0.16666 che sarebbe la porzione di giorno, solo che non so
come farmi dare 4 ore:
select (TSB-TSA)*24
Mi da 3,999999984 e le CAST non mi paiono fungere :\

 Mi da 3,999999984 e le CAST non mi paiono fungere :\
Dimenticavo
Grazie :)

Andrea [Work] ha scritto:

Prova un po' ti ritorna l'ora in decimale e in time
L'ho provata al 'Volo' e sembra funzionare ....
CREATE PROCEDURE NEW1PROCEDURE (nID INTEGER)
returns (numero numeric(15,2),
          tempo TIME )
as
declare variable finemiss time;
declare variable iniziomiss time;
declare variable y decimal(10,2);
begin
   /* Procedure Text */
   Select Datada,Dataa from a_Orari where ID=:nID into :InizioMiss, 
:FineMiss;
   numero = (:FineMiss - :InizioMiss)/3600;  /* calcolo del tempo */
   y=cast(extract(hour from :InizioMiss) as integer) + 
(cast(extract(minute from :InizioMiss) as float)/0.6)/100;
   tempo = cast(:FineMiss as time)-((60*60)*y); /* mi ritorna il tempo 
in modo TIME */
   suspend;
end


 L'ho provata al 'Volo' e sembra funzionare ....
Dopo ci do' un occhio, anche se tempo di aver qualche problemino ad usare
le SP (nel senso che per ora sono sempre state evitate).
Stavo pensando di usare i campi time con una select del genere:
select
case when cast ('03:00' as time) - cast('20:00' as time)>0 then
  cast ('03:00' as time) - cast('20:00' as time)
else
  (cast ('03:00' as time) - cast('20:00' as time)) + (24*60*60)
end
from RDB$DATABASE
Mi basterebbe farmi una function con datainizio,datafine e mi ritorna la
parte SELECT corretta.
Ora ci studio un po'.

 Stavo pensando di usare i campi time con una select del genere:
Esegui la select sulla SP invece che nel DB
ES:
Select numero,tempo from NEW1PROCEDURE (xxx)
dove xx è ID di un determinato record
oppure nella SP metti un controllo se ID=-1 ti torna tutta la tabella.
Personalmente la vedo come + facile ... poi .....


 Personalmente la vedo come + facile ... poi .....
Ti ringrazio,
per ordini superiori devo usare Time semplici, fortunatamente non
dovrebbero esserci casi di turni notturni, in tal caso aggiungerò 24*60*60
:\
Tnx