Ricercare anno e mese

come cercare tramite SQL un campo data che corrisponda ad un anno ed ad un mese specifico ??

Grazie

SELECT * FROM “Persone” WHERE (Compleanno >= ‘2020-01-01’ AND Compleanno <= ‘2020-01-31’)

1 Like

per MySQL:

SELECT * FROM “Persone” WHERE Month(Compleanno) = 1 AND Year(Compleanno) = 2020

per sqlite: (riprendendo l’esempio di Christian)
select * from Persone where compleanno between ‘2020-01-01’ and ‘2020-01-31’
select * from Persone where strftime(’%Y-%m’, compleanno)=‘2020-01’
select * from Persone where strftime(’%Y’, complenanno)=‘2000’ and strftime(’%m’, compleanno)=‘01’
select * from Persone where strftime(’%Y’, complenanno)*1=2000 and strftime(’%m’, compleanno)*1=1

//come la prima ma partendo da una data del mese qualsiasi (usando la select parametrica)
//esempio dataCorrente=‘2020-01-15’
selectSQL(“select * from Persone where compleanno between date(?, ‘start of month’) and date(?, ‘start of month’, ‘+1 month’, ‘-1 day’)”, dataCorrente, dataCorrente)

il problema è che il campo data è un text ed è scritta in italiano giorno/mese/anno

pessima idea…
le date sul db vanno scritte sempre nel formato sql (poi si fanno visualizzare anche con i disegni se vuoi ma nel db vanno scritte in modo standard)

Ho cambiato in tutto il Db il campo data da Text in Date , vorrei trovare delle fatture del mese 3 ed anno 2020 con la ricerca nel campo DataFattura , come posso risolvere ??

selectSQL(“select * from fatture where data between date(?, ‘start of month’) and date(?, ‘start of month’, ‘+1 month’, ‘-1 day’)”, ‘2020-03-01’, ‘2020-03-01’)

Grazie Antonio ma come potrei trovare dalla data tutte le ricevute del mese e dello stesso Anno ??

Antonio il campo data deve essere salvato come data.shortdate. o sqldate ???

Grazie

sqlDate

shortDate è un metodo di visualizzazione, sqlDate o sqlDateTime sono metodi standard di rappresentazione seriale
Un metodo di visualizzazione risente delle definizione locali, ordine degli elementi, separatori differenti a seconda della lingua. rappresentazione seriale è un metodo standard unico per tutti

Un po’ come quando registri un numero decimale come 0.2 (standard) o 0,2 (localizzato)
0.2 è come lo scrivi nel codice (standard). 0,2 lo devi interpretare a partire dalla localizzazione per capirne il valore.

Antonio
ho usato strftime(’%Y, dataFatt) = str(Anno)

ma non va cosa posso utilizzare ancora ??

Grazie

spero che la mancanza dell’apice dopo %Y sia solo dovuta alla copia.

in ogni caso:
prova a fare una select in cui riporti il campo DataFatt come anno (esempio select *, strftime(’%Y’, dataFatt) datafatY from …) e vedi il risultato se contiene l’anno.
Se non lo contiene probabilmente c’è qualcosa che non va nei dati.
Altrimenti se vedi correttamente l’anno a questo punto puoi mettere il vincolo relativo all’anno come:
…where strftime(’%Y’, dataFatt)=? e poi passi come parametri str(Anno) (usando un prepared statement o le nuove query)
Se vuoi scrivere direttamente la query (altamente sconsigliabile in ogni caso) sostituisci a =? la stringa =’"+str(Anno)+"’ "

Grazie Antonio Risolto l’ erroe era nel mese , non mettevo lo 0 nei mesi ad una cifra

Grazie ancora