Pannello di Controllo Moderatore ]

Aggiornare il valore di un campo secondo una certa data

Discussioni sulle caratteristiche di database

Aggiornare il valore di un campo secondo una certa data

Messaggioda markinson » giovedì 16 luglio 2020, 18:18

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!
Allegati
Comuni da visitare_006_UPDATE.odb
(33.08 KiB) Scaricato 16 volte
OpenOffice 4.1.7 / LibreOffice 6 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
markinson
 
Messaggi: 87
Iscritto il: mercoledì 24 giugno 2020, 15:18

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

Messaggioda charlie » venerdì 17 luglio 2020, 7:50

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
charlie
macOS 10.12 Sierra: Open Office 4.1.7 - LibreOffice 6.2.8.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 6937
Iscritto il: mercoledì 19 dicembre 2012, 11:50

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

Messaggioda markinson » venerdì 17 luglio 2020, 8:56

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 212 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 212 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.
OpenOffice 4.1.7 / LibreOffice 6 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
markinson
 
Messaggi: 87
Iscritto il: mercoledì 24 giugno 2020, 15:18

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

Messaggioda markinson » venerdì 17 luglio 2020, 9:17

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 211 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 211 volte
OpenOffice 4.1.7 / LibreOffice 6 still - Windows 10 Pro x64
"Facesti come quei che va di notte, che porta il lume dietro e sé non giova, ma dopo sé fa le persone dotte"
Dante (Purgatorio, Canto XXII)
Avatar utente
markinson
 
Messaggi: 87
Iscritto il: mercoledì 24 giugno 2020, 15:18

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

Messaggioda charlie » venerdì 17 luglio 2020, 11:33

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.
charlie
macOS 10.12 Sierra: Open Office 4.1.7 - LibreOffice 6.2.8.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 6937
Iscritto il: mercoledì 19 dicembre 2012, 11:50


Torna a Base

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti