2012-09-13 14 views
6

Sto usando sqlite per il database locale nel cellulare e nel mio database, ho il campo della data con il nome della colonna RN_CREATE_DATE. Il mio valore della colonna RN_CREATE_DATE è in questo formato 'dd-mm-yy HH:MM:SS' e voglio recuperare i dati con una determinata data. Quale sarà la query esatta per che ho provato con sotto colonna del database e il valorecome eseguire una query in sqlite per un diverso formato di data

** RN_CREATE_DATE

2012-07-27 11:04:34

2012-05-28 10:04: 34
2012-07-22 09: 04: 34 **

SELECT RN_CREATE_DATE 
FROM DISPOSITION 
WHERE RN_CREATE_DATE=strftime('%Y', '2012-07-28 12:04:34') 

ma nessun risultato trovato, appena mi aiuta con questo.

+0

Vedere la documentazione su https://www.sqlite.org/lang_datefunc.html per i dettagli di 'strftime'. –

+0

Ho controllato il documentario e ho provato così tante cose con esso ... sono solo confuso su come mettere una query esatta per questo perché nel mio database sto avendo diffrent data format e sqlite strftime function che ne preleva una diversa. – vishalg

+1

@vishalg forse si desidera aggiornare la domanda con informazioni dettagliate, meglio con un valore di esempio del proprio database. –

risposta

17

strftime funziona così:

sqlite> select strftime('%d-%m-%Y %H:%M:%S', datetime('now')); 
2012-09-13 12:42:56 

Se si desidera utilizzare in una clausola WHERE, sostituire datetime('now') con il datetime si desidera far corrispondere nel formato YYYY-mm-dd HH:MM:SS.

Esempio:

SELECT * 
    FROM t 
WHERE c = strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22'); 
--     dd-mm-YYYY HH:MM:SS YYYY-mm-dd HH:MM:SS 
+1

Grazie mille, funziona come qualsiasi – vishalg

+0

Un'altra query, questo funziona per me ma se passo solo la data quindi non darà alcun risultato perché .. non voglio includere tempo SELECT RN_CREATE_DATE FROM DISPOSITION WHERE RN_CREATE_DATE = strftime ('% d-% m-% Y', '2010-07-28'); Voglio tutti i record con questa data – vishalg

+0

Non capisco bene la tua risposta o la domanda di @vishalg: se memorizzo in una tabella una data senza orario: 'inserisci in valori t ('articolo', data ('2012 -09-13 12:44:22 ') ', ti aspetti di selezionare questa voce usando l'esempio sopra con le informazioni complete su data e ora? –

0

strftime('%Y', '2012-07-28 12:04:34') rendimenti , come:

sqlite> select strftime('%Y', '2012-07-28 12:04:34'); 
2012 

ma la RN_CREATE_DATE è di tipo datetime, che si aspettano un datetime completo come '2012-07-28 00:04:34' . quello che vuoi potrebbe essere semplicemente:

SELECT RN_CREATE_DATE 
FROM DISPOSITION 
WHERE RN_CREATE_DATE='2012-07-28 12:04:34' 
0

strftime genera sempre anni a quattro cifre, quindi bisogna usare substr per tagliare le prime due cifre:

... WHERE RN_CREATE_DATE = strftime('dd-mm-', '2012-07-28 12:04:34') || 
          substr(strftime('%Y %H:%M:%S', '2012-07-28 12:04:34'), 3) 

Sarebbe più facile per memorizzare i valori delle colonne in un formato che è direttamente compreso da SQLite.

+0

se il mio valore della colonna RN_CREATE_DATE non è in formato AA-mm-gg HH: MM: SS e se è nel formato gg-mm-AA HH: MM: SS allora come otterrò il valore secondo la query – vishalg

+0

Questa query * è * per il formato 'gg-mm -YY HH: MM: SS'. Qual è esattamente il tuo problema adesso? –

3

vorrei aggiungere alcune informazioni sull'utilizzo SQLite data e ora con UNIX epoch time:

L'epoca UNIX era 00:00:00 1970-01-01, cioè la mezzanotte del 1 gennaio 1970. La l'ora corrente su macchine UNIX (come quelle che eseguono Linux) viene misurata in secondi da quel momento.

SQLite supporta questo periodo storico e ho trovato molto utile utilizzarlo come formato per un campo DateTime in SQLite.

Concretamente, supponiamo di voler avere una tabella degli eventi, per eventi come i concerti ecc. Voglio un campo fromDateTime da memorizzare all'avvio dell'evento.Posso farlo impostando la fromDateTime presentato al tipo intero, come ad esempio:

CREATE TABLE IF NOT EXISTS Event(
    eventID      INTEGER PRIMARY KEY, 
    name      TEXT, 
    ratingOutOf10    REAL, 
    numberOfRatings    INTEGER, 
    category     TEXT, 
    venue      TEXT, 
    fromDateTime    INTEGER, 
    description     TEXT, 
    pricesList     TEXT, 
    termsAndConditions   TEXT     
); 

Ora, veniamo al l'uso dell'epoca UNIX con campi SQLite DateTime:

Basic 
    select strftime('%s', '2016-01-01 00:10:11');    --returns 1451607012 
    select datetime(1451607012, 'unixepoch');     --returns 2016-01-01 00:10:11 
    select datetime(1451607012, 'unixepoch', 'localtime');  --returns 2016-01-01 05:40:11 i.e. local time (in India, this is +5:30). 

Only dates and/or times: 
    select strftime('%s', '2016-01-01');      --returns 1451606400 
    select strftime('%s', '2016-01-01 16:00');     --returns 1451664000 
    select date(-11168899200, 'unixepoch');      --returns 1616-01-27   
    select time(-11168899200, 'unixepoch');      --returns 08:00:00 

Other stuff: 
    select strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22') --returns 13-09-2012 12:44:22 

Ora, ecco un esempio di utilizzo di quanto sopra con il nostro tavolo evento:

EXAMPLE: 
    insert into Event 
     (name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions) 
     VALUES 
     ('Disco', '3.4', '45', 'Adventure; Music;', 'Bombay Hall', strftime('%s','2016-01-27 20:30:50'), 'A dance party', 'Normal: Rs. 50', 'Items lost will not be the concern of the venue host.'); 


    insert into Event 
     (name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions) 
     VALUES 
     ('Trekking', '4.1', '100', 'Outdoors;', 'Sanjay Gandhi National Park', strftime('%s','2016-01-27 08:30'), 'A trek through the wilderness', 'Normal: Rs. 0', 'You must be 18 or more and sign a release.'); 


    select * from event where fromDateTime > strftime('%s','2016-01-27 20:30:49'); 

mi piace questa soluzione perché è davvero facile lavorare con i linguaggi di programmazione, senza troppo pensare dei vari formati coinvolti nella I tipi di dati di DATA, ORA, DATETIME, ecc. Di SQLite.

Problemi correlati