PDA

View Full Version : [MySql]Errore di sintassi che non trovo :(


RaouL_BennetH
28-03-2007, 12:34
Ecco il pezzo di codice incriminato:



SELECT MAX(IF(day = '1', (TIME_TO_SEC(total) / 3600) ) ) AS 'First' FROM tblDays;



dove caspita sta l'errore di sintassi?

plz...... :help:

MEMon
28-03-2007, 12:44
Ma l'errore non te lo dice?
Cmq vedo che fai day=1 la quale è un assegnazione, dovrebbe essere invece day==1(penso), poi IF() ha 3 argomenti IF(expr1,expr2,expr3), expr1 è l'espressione da testare, expr2 quella che ritorna se expr1 è TRUE e expr2 quella ke ritorna se expr1 è FALSE.

RaouL_BennetH
28-03-2007, 12:47
Risolto....

mi mancava appunto 'expr3', ovvero:



SELECT MAX(IF(day = '1', (TIME_TO_SEC(total) / 3600) , ' ' ) ) AS 'First' FROM tblDays;



Grazie per la dritta, è stata illuminante :)

MEMon
28-03-2007, 12:49
bhe quel day=1 funziona??? cioè testa veramente se day è uguale a 1??
Sicuro che non ti ritorni sempre TRUE? O magari è proprio quello che cerchi...

RaouL_BennetH
28-03-2007, 12:59
bhe quel day=1 funziona??? cioè testa veramente se day è uguale a 1??
Sicuro che non ti ritorni sempre TRUE? O magari è proprio quello che cerchi...

veramente è assegnato ad un contatore nel sorgente di C#, così ad ogni iterazione mi confronta il numero di giorno presente nella tabella con quello presente su un oggetto sul form.

Ad ogni modo, mi sapreste indicare come limitare le cifre decimali di questa query?


ad esempio se il mio risultato è 3.00000, vorrei limitarlo alle sole prime due cifre decimali (3.00).

Grazie mille :)

RaouL.

RaouL_BennetH
28-03-2007, 13:02
trovato :)

la funzione è format, quindi il tutto diventa:


SELECT MAX(IF(day = '1', FORMAT(TIME_TO_SEC(total) / 3600, 2) ) ) AS 'First' FROM tblDays;

MEMon
28-03-2007, 13:06
bho a me sembra strano il day=1 ma magari l'sql funziona così :D

RaouL_BennetH
28-03-2007, 14:08
bho a me sembra strano il day=1 ma magari l'sql funziona così :D

ti posto allora la funzione all'interno del sorgente:



try
{
using(MySqlConnection cn = ConnClass.Create())
{
int days = Thread.CurrentThread.CurrentCulture.Calendar.GetDaysInMonth(mYear, ((DateTimePicker)dateTimePickerHost.Control).Value.Month);

//.........

string createTable = "DROP TABLE IF EXISTS " + myNamedTable[2] + "; CREATE TABLE " + myNamedTable[2] + " AS SELECT (wk.ID) AS personalID ";

for(int count = 1; count <= days; ++count)
{
createTable +=",MAX(IF(giorno= '" + count +"', FORMAT(TIME_TO_SEC(total) / 3600, 2), '' )) AS '" + count +"'";
}
createTable += "altraBellaRobicina....";

//........