Autore Topic: Confronto tra date  (Letto 990 volte)

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Confronto tra date
« il: 23 Febbraio 2012, 16:39:55 CET »
0
Ciao a tutti spero possiate essermi di aiuto, co spiego il mio porblema ke sicuramente è uno sciocchezza. Allora io ho due DatePicker, in base alla data che scelgo debbo fare una query ke mi selezioni sl  gli interventi compresi nell'intervallo scelto. Il problema è ke se scelgo come data di inizio ad esempio 29/02/2012 e data di fine 01/03/2012 non mi rest niente, anche se ci interventi compresi in quella data. Vi posto la query per essere più chiaro:
Codice (Java): [Seleziona]
public Cursor getListaInterventi(String dataDa, String dataA){
                 String query ="SELECT * " +
                        "FROM Event e INNER JOIN Intervento i ON e.IdEvent = i.ID" +
                        " WHERE (e.StartDate >= '" + dataDa + "' AND e.StartDate <= '" + dataA + "')"
                        + " AND  (e.EndDate >= '" +  dataDa + "' AND  e.EndDate <= '" + dataA + "')"; //FUNZIONA
         
            Log.e("", "query: "+query);
         
           dbTTS = dbTTSHelper.getReadableDatabase();
           return dbTTS.rawQuery(query, null);
     }

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Confronto tra date
« Risposta #1 il: 23 Febbraio 2012, 17:03:19 CET »
0
[EDIT]

scusa, ho detto una cavolata
« Ultima modifica: 23 Febbraio 2012, 17:04:56 CET da Ricky` »

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Confronto tra date
« Risposta #2 il: 23 Febbraio 2012, 17:35:06 CET »
0
Ciao, ti ringrazio per la risposta, dici che ho sbagliato?? Ogni intervento ha una data di inizio ed una di fine, nel metodo passo due date che non indicano necessariamente la data di inizio e di fine di un intervento presente nel db. Io vorrei visualizzare tutti gli interventi che hanno una data di inizio compreso tra dataDa e dataA ed una data di fine compreso tra dataDa e data A.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Confronto tra date
« Risposta #3 il: 23 Febbraio 2012, 17:36:18 CET »
0
Ciao, ti ringrazio per la risposta, dici che ho sbagliato?? Ogni intervento ha una data di inizio ed una di fine, nel metodo passo due date che non indicano necessariamente la data di inizio e di fine di un intervento presente nel db. Io vorrei visualizzare tutti gli interventi che hanno una data di inizio compreso tra dataDa e dataA ed una data di fine compreso tra dataDa e data A.

Ciao, scusa, mi sono accorto di aver detto una cavolata e difatti ho modificato il post ma si vede che l'hai letto ugualmente :)
Scusa ancora.

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Confronto tra date
« Risposta #4 il: 23 Febbraio 2012, 17:39:04 CET »
0
Scusami, non avevo letto  :-P, come potrei fare secondo te??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Confronto tra date
« Risposta #5 il: 23 Febbraio 2012, 17:43:41 CET »
0
Non saprei, a dire il vero.
Però quando mi trovo davanti a query che mi fanno impazzire tiro giù il db dall'emulatore o dal device (facendo adb pull) e faccio le query a mani con tool tipo Sqlite Manager. Risparmi un sacco di tempo rispetto a fare le prove su Android.

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Confronto tra date
« Risposta #6 il: 23 Febbraio 2012, 17:45:43 CET »
0
Grazie lo stesso, secondo me il problema è che non riconosce la data 29/02/2012 antecedente la data 01/03/2012, in altri casi funziona.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Confronto tra date
« Risposta #7 il: 23 Febbraio 2012, 18:01:59 CET »
0
Giusto per capirci, che tipo è il campo data? puoi fare un esempio di valori che contiene?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Confronto tra date
« Risposta #8 il: 23 Febbraio 2012, 18:04:14 CET »
+1
Grazie lo stesso, secondo me il problema è che non riconosce la data 29/02/2012 antecedente la data 01/03/2012, in altri casi funziona.
Allora, partiamo dalla premessa che nei database SQLite non esiste il tipo "data". Quindi le date le inserisci come stringhe.
Quando vai a fare il confronto (>= o <=) lui lo fa secondo l'ordinamento delle stringhe e secondo quell'ordinamento 01/03 viene prima di 29/02 perché il carattere 2 viene dopo il carattere 0.
Possibili soluzioni che mi vengono in mente sono:
1) Memorizzare la data convertita in secondi/millisecondi al posto di memorizzarla come stringa.
2) Memorizzare la data secondo il formato AAAA/MM/GG che ti dà l'ordinamento corretto, perché confronta prima gli anni, poi i mesi e poi i giorni.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Confronto tra date
« Risposta #9 il: 23 Febbraio 2012, 18:06:49 CET »
+1
Blackgin, era un po dove volevo arrivare :)
Comunque, un'altra cosa che si può fare è fare le query utilizzando gli operatori di conversione da date a epoc-time:

SQLite Query Language: Date And Time Functions

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Confronto tra date
« Risposta #10 il: 23 Febbraio 2012, 18:10:50 CET »
0
Ragazzi vi ringranzio, appena risolvo vi faccio sapere, grazie ancora  :-)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Confronto tra date
« Risposta #11 il: 23 Febbraio 2012, 18:19:30 CET »
0
Io ho fatto cosi.

Il campo è creato come datetime

datavalore datetime not null

Codice (Java): [Seleziona]
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
ContentValues initialValues = new ContentValues();
String dt= dateFormat.format({oggetto Date});
initialValues.put("datavalore", dateFormat.format(note.getDate()));
       

Recupero cosi:

//
Codice (Java): [Seleziona]
// per giorno
String sql="SELECT * FROM miatabella WHERE datavalore ='"+year+"-"+mese+"-"+stday+"'";

//oppure range di date in questo caso un mese

String sql="SELECT * FROM miatabella WHERE datavalore BETWEEN '"+year+"-"+mese+"-01' and  '"+year+"-"+mese+"-"+day+"'";
               

A me funziona...
La domanda stupida è quella che non si fa

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Confronto tra date
« Risposta #12 il: 27 Febbraio 2012, 09:05:18 CET »
0
Ragazzi scusate il ritardo, ho risolto il problema convertendo la data nel formato anno-mese-giorno. In questo modo funziona bene. Grazie a tutti  :-P