[Risolto] Inserire dinamicamente anno in una query

Discussioni sulle caratteristiche di database
Rispondi
onsite
Messaggi: 3
Iscritto il: domenica 14 gennaio 2018, 12:30

[Risolto] Inserire dinamicamente anno in una query

Messaggio da onsite »

In una moltitudine di query di un DB ho inserito la condizione
BETWEEN '2017-05-01' AND '2017-05-31'

Ogni anno perdo un mare di tempo a correggere l'anno.
Mi piacerebbe che la query andasse a leggere l'anno in un determinato posto (una variabile? un campo di una apposita tabella?) in modo che semplicemente cambiando quel valore, automaticamente le query operassero il filtro in base all'anno impostato.
Come dovrei fare?
grazie
Ultima modifica di charlie il lunedì 15 gennaio 2018, 11:49, modificato 1 volta in totale.
Motivazione: Aggiunti [Risolto] e spunta verde
OpenOffice 4.1 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Inserire dinamicamente anno in una query

Messaggio da charlie »

Ciao e benvenuto sul forum.
Se intanto ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Per una panoramica delle regole del forum consulta il Manuale di sopravvivenza: http://forum.openoffice.org/it/forum/vi ... hp?f=1&t=2
Buon proseguimento.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Inserire dinamicamente anno in una query

Messaggio da charlie »

Ciao, le funzioni "data" e "time" a disposizione in HSQLDB 1.8 (il motore di Base) sono queste:

Codice: Seleziona tutto

DATEDIFF(string, datetime1, datetime2)[2]
returns the count of units of time elapsed from datetime1 to datetime2. The string indicates the unit of time and can have the following values 'ms'='millisecond', 'ss'='second','mi'='minute','hh'='hour', 'dd'='day', 'mm'='month', 'yy' = 'year'. Both the long and short form of the strings can be used.

DAYNAME(date)
returns the name of the day

DAYOFMONTH(date)
returns the day of the month (1-31)

DAYOFWEEK(date)
returns the day of the week (1 means Sunday)

DAYOFYEAR(date)
returns the day of the year (1-366)

HOUR(time)
return the hour (0-23)

MINUTE(time)
returns the minute (0-59)

MONTH(date)
returns the month (1-12)

MONTHNAME(date)
returns the name of the month

NOW()
returns the current date and time as a timestamp) - use CURRENT_TIMESTAMP instead

QUARTER(date)
returns the quarter (1-4)

SECOND(time)
returns the second (0-59)

WEEK(date)
returns the week of this year (1-53)

YEAR(date)
returns the year

CURRENT_DATE[2]
returns the current date

CURRENT_TIME[2]
returns the current time

CURRENT_TIMESTAMP[2]
returns the current timestamp
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
onsite
Messaggi: 3
Iscritto il: domenica 14 gennaio 2018, 12:30

Re: Inserire dinamicamente anno in una query

Messaggio da onsite »

Credo di non essermi spiegato bene.
Ho un DB con una moltitudine di query in cui sono presenti intervalli di date che si riferiscono ad un preciso anno.
Esempio: BETWEEN '2017-05-01' AND '2017-05-31'

Ogni anno nuovo le devo modificare per cambiare l'anno.
Se la query potesse "leggere" il valore dell'anno da qualche parte, mi sarebbe sufficiente modificare l'anno lì per aggiornare automaticamente tutte le query che ne fanno uso.
La query diverrebbe una roba del tipo
BETWEEN $ANNO || '-05-01' AND $ANNO ||'-05-31'

Ho pensato, ad esempio, di creare una tabella ANNO, con un solo campo (anno) e, in qualche modo -che ancora non ho trovato- usare il valore che inserirei lì (la tabella sarebbe composta sempre da un solo record).
MI potete aiutare?
OpenOffice 4.1 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8807
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Inserire dinamicamente anno in una query

Messaggio da charlie »

Per spiegarti, ti eri spiegato.
L'elenco delle funzioni era solo un suggerimento per vedere quale potevi utilizzare.
Ad esempio la combinazione

Codice: Seleziona tutto

YEAR(NOW()
ti restituisce l'anno corrente, mentre

Codice: Seleziona tutto

YEAR(NOW()-1
l'anno precedente.
Bisogna fare delle prove per vedere se sono utilizzabili nell'espressione BETWEEN .... ma occorre un file di esempio che, se non è il tuo database, sia almeno una parte con una query reale.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
onsite
Messaggi: 3
Iscritto il: domenica 14 gennaio 2018, 12:30

Re: Inserire dinamicamente anno in una query

Messaggio da onsite »

Ho risolto in questo modo (non so quanto elegante):
Ho creato una nuova tabella ANNO, con un solo record in cui c'è solo il campo ANNO che modifico ogni anno.

Nella query:
SELECT..., "ANNO" WHERE ... AND YEAR( "TABELLA"."DATA" ) = "ANNO"."ANNO" AND MONTH( "TABELLA"."DATA" ) = '01' ORDER BY ...

Grazie dei suggerimenti
OpenOffice 4.1 su Windows 7
Rispondi