Italian Le date in SQLLite e la Ricerca di un compleanno

Ennesima77

Member
Licensed User
Longtime User
Ciao a tutti,
ieri son diventato scemo per circa 2 ore per capire come gestrire i compleanni in una mia applicazione.
Inizialmente salvavo le date formattandole in formatoamericano MMddyyyy, poi ho scoperto (e magari è la scoperta ll'acqua calda) che il formato corretto da usare è yyyy-MM-dd e credo che serva anche poi per le ricerche che sia fatto in questo modo.

Sgoogolando un pò ho trovato la funzione strftime di SQLLite che formatta nell'estrazione dei dati e permette alcune comparazioni almtrimenti impossibili.

Da qui nasce la funzione per la ricerca dei compleanni:

Select * from utenti where strftime('%d-%m', '[valore da cercare]') = strftime('%d-%m', '[campo data di nascita]')

Ovviamente [valore da cercare] deve essere sempre nel formato yyyy-MM-dd
Sperando di far risparmiare tempo a qualcuno vi saluto.
 

Ennesima77

Member
Licensed User
Longtime User
Grazie.
Solitamente io le date le salvo come stringhe.
Comunque hai provato ad utilizzare dateformat ?
Prova a dare un occhio qui:
DateTime - Basic4android Wiki

Difatti inizialmente avevo usato DateTime.Format, avevo provato tutte le combinazioni possibili, ma nulla.
Poi ho fatto la famosa prova del fesso ovvero: ho eseguito una query di aggiornamento su di record facendo impostare ad SQLLite in automatico il valore della data odierna
update utenti set Data = Date('now')

Da li ho visto che qualsiasi formato impostassi in DateTime.Format SQL impostava la data come yyyy-MM-dd. di conseguenza credo che la cosa sia intrinseca di SQLLite e non dipenda dal linguaggio e dai settaggi di programmazione.
Tra le altre cose avevo addirittura provato a convertire la data in Tick (genera un intero lungo) che ovviamente viene memorizzato, ma poi non viene usato correttamente nelle query di ricerca.
 

GaNdAlF89

Active Member
Licensed User
Longtime User
a volte, dipende dall'utilizzo che se ne fa, conviene creare il campo data come long; il formato di inserimento sarà yyyyMMdd. questo permette di fare facilmente i confronti tra le date (>, >=, ecc...), ed essendo comunque un numero, di cercare la corrispondenza "esatta"!

preferisco usare DateTime.DateFormat solo quando devo visualizzare una data..

puoi anche trasformarla in Ticks, che sostanzialmente è un timestamp in formato long, ma poi da questo devi ricavarti la data con DateTime.Date e l'ora con DateTime.Time
 
Last edited:
Top