3 messaggi dal 27 novembre 2016
Buonasera
Ho un DB SQLSERVER in una tabella ho un valore time
a questo valore time devo applicare un coefficiente ma non mi consente operazioni dicendo che time è incompatibile con numeric

L'esempio pratico è un tempo di una competizione
00:01:34,8
a questo tempo devo applicare un coefficiente
ho provato a fare
TEMPO*COEFFICIENTE

se converto il formato TIME in NUMERIC poi dovrei riconvertirlo in TIME ma non ho trovato funzioni adeguate
Grazie per qualsiasi consiglio
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
questo tipo di dato e' sempre stato.... "stupido", a mio punto di vista.... :)
e' "parte" di un DATETIME, nel senso che indica un momento puntuale nell'asse temporale, e niente piu' di questo...
e' bello pensare di utilizzarlo come un TimeSpan/Durantion, quindi una "durata temporale", ma invece indica SOLO un orario.... punto... quindi
SELECT '13:11:59';
indica SOLO il momento delle ore 13, 11 minuti e 59 secondi...
se quindi la colonna indica "l'orario" di evenienza di un qualche cosa, ok, diversamente, se deve invece indicare un tempo di durata, personalmente preferirei utilizzare la sua "rappresentazione" in minuti, o secondi, o decimi come magari richiesto per la precisione a te necessaria.... operando ad esempio in "secondi", avresti nella colonna un valore tipo 47519 secondi (un numero intero)... e operando matematicamente sai che il modulo 60 del valore rappresenta i secondi, il modulo 3600 del valore / 60 corrisponde alle ore, e finalmente il valore / 3600 indica le ore... qui puoi poi operare come meglio ti aggrada... aggiungere ad esempio un coefficiente di 1,22 [come l'IVA :)] al tuo valore, e avere nuovamente una rappresentazione in versione "ore/minuti/secondi" quando ti interessa...
trivialmente:
SET NOCOUNT ON;
DECLARE @t time(7) = '13:11:59';
SELECT @t AS [Tempo Puntuale]
PRINT 'NESSUNA OPERAZIONE TENDENZIALMENTE EFFETTUABILE.... il valore rappresenta un punto nel tempo...';

PRINT REPLICATE('-', 50);
PRINT 'operiamo invece su un intero, che definisce un determinato numero di secondi relativi alla durata di un evento';
DECLARE @sec int = 47519;
SELECT (@sec / 3600) AS [Ore], 
  (@sec % 3600) / 60 AS [Minuti],
  (@sec % 60) AS [Secondi];

PRINT 'ergo';
SELECT CONVERT(varchar(10), (@sec / 3600)) + ' Ore ' 
  +  CONVERT(varchar(10),(@sec % 3600) / 60) + ' Minuti ' 
  + CONVERT(varchar(10),(@sec % 60)) + ' Secondi';

GO
PRINT REPLICATE('-', 50);
PRINT 'coefficiente 1.22 da aggiungere';
DECLARE @coeff decimal(3,2) = 1.22;

DECLARE @sec int = 47519;

SELECT @sec = @sec * @coeff;
SELECT @sec AS [Valore derivante];

SELECT (@sec / 3600) AS [Ore], 
  (@sec % 3600) / 60 AS [Minuti],
  (@sec % 60) AS [Secondi];

PRINT 'ergo';
SELECT CONVERT(varchar(10), (@sec / 3600)) + ' Ore ' 
  +  CONVERT(varchar(10),(@sec % 3600) / 60) + ' Minuti ' 
  + CONVERT(varchar(10),(@sec % 60)) + ' Secondi';

--<-------------
Tempo Puntuale
----------------
13:11:59.0000000

NESSUNA OPERAZIONE TENDENZIALMENTE EFFETTUABILE.... il valore rappresenta un punto nel tempo...
--------------------------------------------------
operiamo invece su un intero, che definisce un determinato numero di secondi relativi alla durata di un evento
Ore         Minuti      Secondi
----------- ----------- -----------
13          11          59

ergo

---------------------------------------------------
13 Ore 11 Minuti 59 Secondi

--------------------------------------------------
coefficiente 1.22 da aggiungere
Valore derivante
----------------
57973

Ore         Minuti      Secondi
----------- ----------- -----------
16          6           13

ergo

---------------------------------------------------
16 Ore 6 Minuti 13 Secondi


per tua maggiore informazione leggi ad esempio anche http://www.sqlteam.com/article/working-with-time-spans-and-durations-in-sql-server

salutoni

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
3 messaggi dal 27 novembre 2016
Io ho i risultati che carico da un file generato da un sistema in ore:minuti:secondi.decimi
consigli di convertire questo in secondi quindi? per poi riconvertirlo?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
purtroppo si
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.