Pagina 1 di 1

[Risolto] Operazioni con date in SQL su Open Office Base

Inviato: giovedì 6 giugno 2013, 17:09
da Kiwi
Ciao a tutti,
Non ho tanta esperienza e non riesco ad effettuare operazioni con le date all'interno di query SQL su Open Office Base.

L'operazione in sè non è difficile: devo selezionare all'interno di una tabella una serie di record registrati in passato che rispondono a determinate caratteristiche, una di queste è che la loro data sia oltre 14 mesi prima della data odierna (es. oggi che scrivo, tutti i record prima del 7 Aprile 2012; tra un mese mi verranno estratti invece quei record la cui data è anteriore al 7 Maggio 2012, e così via).

Premesse:
- Il campo "data record" è previsto in tabella e viene compilato obbligatoriamente ad ogni inserimento record, siamo quindi certi di averlo. E' un campo "data"
-

Primo tentativo:

Codice: Seleziona tutto

SELECT DISTINCT "tb"."Seriale", "tb"."Genere Record", "tb"."Nr Casa", "tb"."Nome Gruppo" 
FROM "tb" AS "tb" 
     WHERE "tb"."Tipo Record" != 'Revoca' 
          AND "tb"."Data Record" >= ALL ( SELECT DISTINCT "tb1"."Data Record" FROM "tb" AS "tb1" WHERE "tb"."Seriale" = "tb1"."Seriale" ) 
          AND ( "tb"."Data Record" + 225 <= CURDATE( ) )
Mi viene dato un messaggio di errore
Stato SQL: 37000
Codice di errore: -16
Tipo di dato errato: java.lang.NumberFormatException in statement [...

Da cui capisco che sicuramente c'è qualche formato che non si parla correttamente...

Secondo tentativo:

Codice: Seleziona tutto

SELECT DISTINCT "tb"."Seriale", "tb"."Genere Record", "tb"."Nr Casa", "tb"."Nome Gruppo" 
FROM "tb" AS "tb" 
     WHERE "tb"."Tipo Record" != 'Revoca' 
          AND "tb"."Data Record" >= ALL ( SELECT DISTINCT "tb1"."Data Record" FROM "tb" AS "tb1" WHERE "tb"."Seriale" = "tb1"."Seriale" )
          AND ( DATEDIFF( 'dd', '"tb"."Data Record"', 'CURDATE()' ) >= 225 ) 
La query funziona prima dell'inserimento dell'ultima riga (quella dove faccio il controllo della data), ma se aggiungo quest'ultima mi viene dato il seguente errore:
Stato SQL: 22001
Codice di errore: -124
Valore troppo lungo in statement [SELECT DISTINCT ...

A me pare molto strano, in quanto senza l'ultima riga non mi viene mai detto che c'è un valore troppo lungo... come può venir fuori solamente aggiungendo una WHERE clause dove si fa semplicemente un confronto? :crazy:

Spero di aver messo abbastanza dettagli per spiegare adeguatamente il problema...
Grazie in anticipo a chi proverà ad aiutarmi! ;)

Re: Operazioni con date in SQL su Open Office Base

Inviato: venerdì 7 giugno 2013, 10:09
da Gaetanopr
Presumendo una tabella chiamata "Tabella1" con i seguenti campi "ID", "Importo", "Data" l'istruzione diventa in questo modo:

Codice: Seleziona tutto

SELECT "ID", "Importo", "Data", DATEDIFF( 'month', "Data", Now ) AS "Mesi" FROM "Tabella1"  Where "Mesi" > 14
oppure in giorni esempio 365+60=425 ci saranno piccole differenze considerando che i mesi non sono tutti di 30

Codice: Seleziona tutto

SELECT "ID", "Importo", "Data", DATEDIFF( 'day', "Data", Now ) AS "Giorni" FROM "Tabella1"  Where "Giorni" >= 425
Allego esempio db per maggiore comprensione

Re: Operazioni con date in SQL su Open Office Base

Inviato: giovedì 13 giugno 2013, 13:38
da Kiwi
Grazie mille Gaetano,
Nel pomeriggio/serata faccio le dovute prove e poi provvedo ad aggiornare. 8-)

Re: Operazioni con date in SQL su Open Office Base

Inviato: lunedì 1 luglio 2013, 19:41
da Kiwi
Kiwi ha scritto:Grazie mille Gaetano,
Nel pomeriggio/serata faccio le dovute prove e poi provvedo ad aggiornare. 8-)
Chiedo scusa per il ritardo... non ho fatto in tempo a risolvere che mi si è fuso il monitor del pc!
Comunque... risolto (cambiando la sintassi ed attivando il pulsante "SQL")! Grazie mille Gaetano! :super: