Pagina 1 di 1

Aggiornare il valore di un campo secondo una certa data

MessaggioInviato: giovedì 16 luglio 2020, 17:18
da markinson
Salve a tutti! :)
Stavolta rompo le scatole non per porre una domanda (ci saranno senz'altro occasioni per farlo), piuttosto per condividere una soluzione che mi ha fatto sudare un pochino.
Insomma, invece di chiedere subito aiuto, ho tentato di venire a capo del dilemma (per me) da solo.
Il risultato finale è stato quello atteso e allora ho pensato di pubblicare questo post.

Come da oggetto, il mio intento era quello di modificare il valore di un campo, che si ripeteva per un centinaio di record (ma non in tutti i record della base di dati), qualora tale valore fosse stato uguale o inferiore a una certa data.

Ho utilizzato un comando SQL che si chiama UPDATE, passando da "Strumenti - SQL ..." di Base.
Nel mio caso la soluzione è stata qualcosa del tipo:
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_tabella"
SET "DataRilevazione" = '1900-01-01'
WHERE "DataRilevazione" > '2012-01-01'


Ho manipolato anche un dbase di esempio (che allego), passandogli le seguenti istruzioni, sempre eseguite con successo.
(1)
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE "Comune" = 'Comune49'


(2)
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE "PrimaDel" < Now()


(3)
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE "PrimaDel" <= '2020-07-01'


Le mie fonti (perché non ho fatto proprio tutto da solo, eh) sono state:

Durante la mia ricerca ho scovato la sezione SQL Tutorial del sito Javatpoint e mi è sembrato molto ricco e interessante.

Se ho commesso errori oppure non sono stato ortodosso nell'uso del linguaggio di interrogazione, aspetto indicazioni o suggerimenti.
Grazie per l'attenzione!

Re: Aggiornare il valore di un campo secondo una certa data

MessaggioInviato: venerdì 17 luglio 2020, 6:50
da charlie
Ciao, hai fatto un bel esercizio di esecuzione diretta SQL.
Forse (è da verificare) avresti potuto fare in una volta sola:
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE "Comune" = 'Comune49'
OR
"PrimaDel" < Now()
OR
"PrimaDel" <= '2020-07-01'


Fai attenzione alle "fonti", di SQL ne esistono diversi e non sempre la sintassi coincide.
Il nostro è HSQLDB 1.8 e la documentazione ufficiale è qui: viewtopic.php?f=29&t=6474

Re: Aggiornare il valore di un campo secondo una certa data

MessaggioInviato: venerdì 17 luglio 2020, 7:56
da markinson
Salve charlie!
Grazie del tuo riscontro! :D

In realtà avevo fatto prove singole, con le varie istruzioni come sopra descritte, però il tuo intervento mi ha invogliato a testare anche un'istruzione "OR" ed ecco il risultato (ho messo le parentesi essenzialmente per mia chiarezza).

Tabella prima di passare il comando UPDATE ... SET ... WHERE (... OR ...)
AOO_UPDATE_001_ante.jpg
Tabella prima di passare il comando UPDATE ... SET ... WHERE (... OR ...)
AOO_UPDATE_001_ante.jpg (13 KiB) Osservato 262 volte


Istruzione SQL inserita:
Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE ("Comune" = 'Comune49' OR "PrimaDel" < Now() OR "PrimaDel" <= '2020-07-01')


Tabella dopo aver passato il comando UPDATE ... SET ... WHERE (... OR ...)
AOO_UPDATE_002_post.jpg
Tabella dopo aver passato il comando UPDATE ... SET ... WHERE (... OR ...)
AOO_UPDATE_002_post.jpg (13.17 KiB) Osservato 262 volte


charlie ha scritto:Fai attenzione alle "fonti", di SQL ne esistono diversi e non sempre la sintassi coincide.

Hai fatto centro ancora una volta: avevo in mano i comandi (UPDATE, SET, WHERE), ma la sintassi (si dice così?) tra le "mie" fonti e ciò che in realtà richiede HSQLDB è risultata essere leggermente diversa. Diversa quel tanto che restituiva errori per me inspiegabili, fintantoché non ho consultato questo forum e notato quelle piccole ma fondamentali differenze per scrivere un'istruzione corretta.

Ho preso nota dei link da te segnalati! ;)

Alla prossima! :)

P.S.
Ho avuto qualche problema con il dbase che sto costruendo, in termini di errori improvvisi e ripristini non andati a buon fine, però questo è fuori argomento, lo so.
Avevo pensato di scrivere per ricevere un suggerimento o una spiegazione, soltanto che i crash sono stati così rovinosi e più di tutto improvvisi che non ho capito nemmeno quello che è successo ... magari - e spero proprio di no - se si dovessero verificare di nuovo, ricorrerò all'aiuto del forum.

Re: Aggiornare il valore di un campo secondo una certa data

MessaggioInviato: venerdì 17 luglio 2020, 8:17
da markinson
Postilla.

Stavo riguardando l'istruzione che ho scritto e ho notato quella che credo debba definirsi una illogicità.
Voglio dire che oggi è il 17 luglio 2020 e io ho posto come condizione:
Codice: Seleziona tutto   Espandi visualeStringi visuale
WHERE ("Comune" = 'Comune49' OR "PrimaDel" < Now() OR "PrimaDel" <= '2020-07-01')


Dunque "PrimaDel" < Now() (cioè prima del 17/07/2020) rende superflua la condizione "PrimaDel" <= '2020-07-01'.

Per verificare se il comando lavorasse in maniera corretta ho pertanto rifatto tutte le operazioni, così come di seguito descritto.
A presto!

AOO_UPDATE_001-001_post.jpg
Tabella ante UPDATE
AOO_UPDATE_001-001_post.jpg (12.97 KiB) Osservato 261 volte


Codice: Seleziona tutto   Espandi visualeStringi visuale
UPDATE "tbl_ComuniDaVisitare"
SET "DaVisitare" = TRUE
WHERE ("Comune" = 'Comune49' OR "PrimaDel" < Now() OR "PrimaDel" = '2020-10-01')


AOO_UPDATE_002-001_post.jpg
Tabella post UPDATE
AOO_UPDATE_002-001_post.jpg (13.32 KiB) Osservato 261 volte

Re: Aggiornare il valore di un campo secondo una certa data

MessaggioInviato: venerdì 17 luglio 2020, 10:33
da charlie
Nota per chi usa LibreOffice.
La sintassi della data corretta è
Codice: Seleziona tutto   Espandi visualeStringi visuale
{d '2020-07-01' }

La forma '2020-07-01' che funziona in Open Office, in LibreOffice dà risultati sbagliati.