come cercare tramite SQL un campo data che corrisponda ad un anno ed ad un mese specifico ??
Grazie
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’)
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