PDA

View Full Version : [MySqL]devo convertire la somma di varbinary...


RaouL_BennetH
08-03-2007, 10:30
In formato "tempo" espresso in centesimi.

La situazione è questa:

Da non so dove viene generata una tabella che contiene valori del tipo:

188.3
145
190
213.3

e così via

e sono definiti come varbinary (non so il perchè e non ho autorizzazioni per variare questa cosa).

ora, io dovrei fare una somma di questi valori, e quindi la prima cosa che ho fatto è stata:

select sum(valori);

Nel caso dei valori riportati su ho giustamente ottenuto: 736,60.

Il problema è che quel ".3" in realtà rappresenta delle "mezze ore", quindi, la mia somma dovrei farla tra:

188.5
145
190
213.5

che quindi equivale a 737 ( e se notiamo il valore di prima, 736.60, il .60 rappresenta appunto un'ora).

Ora, è logico che non devo convertire ogni singolo valore, ma stavo cercando di trovare una formula di questo tipo che invece, ovviamente, su un campo di tipo 'time' mi funziona perfettamente:

select sum(time_to_sec(valore) / 3600);

Ma appunto, 'valore' in quel caso è di tipo time.

Mi date qualche idea?

Grazie,

RaouL.

RaouL_BennetH
09-03-2007, 10:43
uppettino :(

Ho dimenticato di menzionare il fatto che preferibilmente dovrei farlo tramite qualche funzione di mysql direttamente. Se non esiste qualcosa del genere allora ovviamente tratterò il numero in questo modo:

separo le ore dai minuti, e poi faccio i minuti diviso sessanta; es.:

190.30 -> 190 + (30/60) = 190.50

RaouL_BennetH
09-03-2007, 11:48
ok, ho risolto facendo prima una select sui tipi di campo varbinary formattandoli in questo modo:



string myTotal = "SELECT TIME_FORMAT(SUM(TIME_TO_SEC(total) / 3600)), GET_FORMAT(TIME, 'ISO') FROM blablbalba" ;
MySqlCommand getTotal = new MySqlCommand(myTotal, myConnection);
string totale = getTotal.ExecuteScalar().ToString();
double totalTime = Double.Parse(totale);
myLabel = totalTime.ToString("N2"); //formattazione per limitare la visualizzazione a due decimali




RaouL.