Italian Query con date

micro

Well-Known Member
Licensed User
Longtime User
Salve ragazzi,
mi rivolgo agli esperti dei db e delle query.
Diciamo che non ho grossi problemi almeno sino ad ora e per averli usati da poco (i db) con sqlite devo dire che sono abbastanza soddisfatto.
Per le ricerche semplici o a più campi non ho problemi però non saprei come fare delle ricerche tra due date.
In pratica vorrei trovare tutti i record di un db confrontando la data tra le due di riferimento.

Grazie a tutti
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Ciao Micro,

dovresti dire in che modo/formato ai memorizzato la data.
molto probabilmente se hai utilizzato la forma AAAAMMGG, non dovresti aver problemi:
nella query devi indicare le date nello stesso formato AAAAMMGG

In ogni caso prova a leggere la documentazione qui SQLite Query Language: Date And Time Functions

ciao,
 
Last edited:

micro

Well-Known Member
Licensed User
Longtime User
No gianni,
la data la uso nel formato classico gg/mm/aaaa formattata come stringa e memorizzata come tale.

Grazie per la disponibilità.
 

maXim

Active Member
Licensed User
Longtime User
Ciao micro,

certo che utilizzando la data come una stringa e per lo più formattata secondo lo standard italiano la "cosa" si complica un poco ma è possibile "aggirare" l'ostacolo come ad esempio è mostrato qui sotto:


' si ammette di avere in una tabella ("TabMov") un campo
' data di nome "DateIt" nel formato stringa gg/mm/aaaa...

' si desidera eseguire una query che mostri tutti i record
' dove "DateIt" è maggiore del "15/07/2008" ("DateStart")
' e minore di "12/09/2008" ("DateEnd")...

' la select di estrapolazione dei dati potrebbe essere la seguente:


xSQL = "SELECT * FROM TabMov WHERE (((SUBSTR(DateIt, 7, 4) || SUBSTR(DateIt, 4, 2) || SUBSTR(DateIt, 1, 2)) >= '20080715') AND ((SUBSTR(DateIt, 7, 4) || SUBSTR(DateIt, 4, 2) || SUBSTR(DateIt, 1, 2)) <= '20080912'))"

' oppure:

DateStart = [data in formato italiano per inizio confronto]
' qualsiasi stringa o variabile che contenga una data nel formato gg/mm/aaaa
DateEnd = [data in formato italiano per fine confronto] ' qualsiasi stringa o variabile che contenga una data nel formato gg/mm/aaaa
q_Date_Start = SubString(DateStart, 6, 4) & SubString(DateStart, 3, 2) & SubString(DateStart, 0, 2) ' aaaammgg
q_Date_End = SubString(DateEnd, 6, 4) & SubString(DateEnd, 3, 2) & SubString(DateEnd, 0, 2) ' aaaammgg
xSQL = "SELECT * FROM TabMov WHERE (((SUBSTR(DateIt, 7, 4) || SUBSTR(DateIt, 4, 2) || SUBSTR(DateIt, 1, 2)) >= '" & q_Date_Start & "') AND ((SUBSTR(DateIt, 7, 4) || SUBSTR(DateIt, 4, 2) || SUBSTR(DateIt, 1, 2)) <= '" & q_Date_End & "'))"


Comunque ti consiglio, anche per una maggior velocità di elaborazione, di convertire i campi delle tabelle di database che utilizzi come date nel formato timestring.

Saluti,

Massimo
 
Last edited:

micro

Well-Known Member
Licensed User
Longtime User
Grazie massimo,
gentile come sempre e come tutti gli altri del resto.
Ho voluto memorizzare la data come stringa un pò per inesperienza :) e perchè la necessità (anche se remota) di trovare record tra due date di riferimento mi è sorta adesso.

Ancora grazie.
 
Top