web-dev-qa-db-fra.com

comment interroger dans sqlite pour différents formats de date

J'utilise sqlite pour la base de données locale dans mobile et dans ma base de données. J'ai un champ de date avec le nom de colonne RN_CREATE_DATE. La valeur de ma colonne RN_CREATE_DATE est dans ce format 'dd-mm-yy HH:MM:SS' et je souhaite récupérer les données avec une date donnée. Quelle sera la requête exacte pour laquelle j'ai essayé avec la colonne et la valeur de la base de données ci-dessous

** 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')

mais aucun résultat trouvé, aidez-moi avec ça.

9
vishalg

strftime fonctionne comme ceci:

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

Si vous souhaitez l'utiliser dans une clause WHERE, remplacez datetime('now') par la date et l'heure que vous souhaitez faire correspondre au format YYYY-mm-dd HH:MM:SS.

Exemple:

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
23
user647772

J'aimerais ajouter des informations sur l'utilisation de SQLite Date and Time avec UNIX Epoch time:

L’époque UNIX était 00:00:00 1970-01-01, c’est-à-dire que le 1er janvier 1970 à minuit. L’heure actuelle sur les ordinateurs UNIX (comme ceux fonctionnant sous Linux) est mesurée en secondes depuis ce moment. 

SQLite prend en charge cette période, et je l’ai trouvé très utile pour l’utiliser comme format de champ DateTime dans SQLite.

Concrètement, supposons que je veuille avoir une table d'événements, pour des événements tels que des concerts, etc. Je veux un champ fromDateTime à stocker lorsque l'événement commence. Je peux le faire en définissant le fichier fromDateTime sur type INTEGER, comme suit:

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                
);

Passons maintenant à l'utilisation des champs UNIX Epoch avec les champs DateTime de SQLite:

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

Maintenant, voici un exemple d'utilisation de ce qui précède avec notre table d'événements:

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');

J'aime cette solution car il est très facile de travailler avec des langages de programmation, sans trop réfléchir aux divers formats impliqués dans les types de données DATE, TIME, DATETIME, etc. de SQLite.

3
Abhishek Divekar

strftime génère toujours des années à quatre chiffres, vous devez donc utiliser substr pour couper les deux premiers chiffres:

... 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)

Il serait plus facile de stocker les valeurs de colonne dans un format directement compris par SQLite.

1
CL.

strftime('%Y', '2012-07-28 12:04:34') renvoie 2012 , sous la forme:

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

mais le RN_CREATE_DATE est du type datetime, qui attend un datetime complet comme "2012-07-28 12:04:34". ce que vous voulez peut être simplement:

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