Comment insérer une valeur datetime dans une base de données SQLite?

109

J'essaye d'insérer une valeur datetime dans une base de données SQLite . Cela semble être un succès, mais lorsque j'essaye de récupérer la valeur, il y a une erreur:

<Impossible de lire les données>

Les instructions SQL sont:

create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')
Brad
la source

Réponses:

153

Le format dont vous avez besoin est:

'2007-01-01 10:00:00'

ie aaaa-MM-jj HH: mm: ss

Si possible, cependant, utilisez une requête paramétrée car cela vous évite de vous soucier des détails de mise en forme.

Itowlson
la source
Comment classer par date avec de telles chaînes?
IgorGanapolsky
3
Lorsque vous formatez des dates comme celle-ci, l'ordre des dates et l'ordre lexical fonctionnent de la même manière. Par exemple, '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01' à la fois sous forme de chaînes et de dates. Mais vous n'avez pas strictement besoin de vous en soucier car SQLite ORDER BY se chargera de la commande pour vous.
itowlson
7
Notez que vous ne pouvez pas comparer de manière fiable des dates avec une précision différente en utilisant un ordre lexical, par exemple "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" renvoie 1 mais "SELECT datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" renvoie 0.
Shane
@itowlson Comment cela fonctionnera-t-il lorsque vous avez une application multilingue?
batmaci
46

La façon de stocker des dates dans SQLite est:

 yyyy-mm-dd hh:mm:ss.xxxxxx

SQLite a également des fonctions de date et d'heure que vous pouvez utiliser. Voir SQL tel que compris par SQLite, fonctions de date et d'heure .

Tor Valamo
la source
3
Pour info, .xxxxxxici dans la syntaxe de @ TorValamo = .SSS=% f dans la documentation SQLite, c'est à dire des fractions de seconde.
Flak DiNenno
2
DateTime.parse ('2016-05-28 14:27:00 -0300'). Strftime ('% Y-% m-% d% H:% M:% S')
rodvlopes
17

Vous devez changer le format de la chaîne de date que vous fournissez afin de pouvoir l'insérer à l'aide de la fonction STRFTIME. Raison d'être, il n'y a pas d'option pour l'abréviation d'un mois:

%d  day of month: 00
%f  fractional seconds: SS.SSS
%H  hour: 00-24
%j  day of year: 001-366
%J  Julian day number
%m  month: 01-12
%M  minute: 00-59
%s  seconds since 1970-01-01
%S  seconds: 00-59
%w  day of week 0-6 with sunday==0
%W  week of year: 00-53
%Y  year: 0000-9999
%%  % 

L'alternative est de formater la date / heure dans un format déjà accepté:

  1. AAAA-MM-JJ
  2. AAAA-MM-JJ HH: MM
  3. AAAA-MM-JJ HH: MM: SS
  4. AAAA-MM-JJ HH: MM: SS.SSS
  5. AAAA-MM-JJTHH: MM
  6. AAAA-MM-JJTHH: MM: SS
  7. AAAA-MM-JJTHH: MM: SS.SSS
  8. HH: MM
  9. HH: MM: SS
  10. HH: MM: SS.SSS
  11. maintenant

Référence: Fonctions de date et d'heure SQLite

Poneys OMG
la source
Bien que non répertorié dans le tableau, la documentation indique également que vous pouvez ajouter «Z» ou des décalages tels que «-0400»
coolaj86
10

Utilisez CURRENT_TIMESTAMPquand vous en avez besoin, au lieu de OF NOW()(qui est MySQL)

gelé_
la source
1
cela fonctionne, une chose ne va pas. CURRENT_TIMESTAMP renvoie datetime sans UTC, savez-vous comment résoudre ce problème. Merci d'avance!
Ulug'bek Ro'zimboyev
8

Lisez ceci : 1.2 Dateet le meilleur type de données de type de données heure pour stocker la date et l'heure est:

TEXT le meilleur format est: yyyy-MM-dd HH:mm:ss

Alors lisez cette page; il est préférable d'expliquer la date et l'heure SQLite. J'espère que cela vous aidera

Ali Amanzadegan
la source
5
Vous devriez envisager de répondre à la question, avec des liens qui soutiennent votre réponse, pas seulement un tas de liens
Gonzalo.-
0

Ce n'est peut-être pas la méthode la plus populaire ou la plus efficace, mais j'ai tendance à renoncer aux types de données forts dans SQLite car ils sont tous essentiellement vidés sous forme de chaînes de toute façon.

J'ai déjà écrit un fin wrapper C # autour de la bibliothèque SQLite (lors de l'utilisation de SQLite avec C #, bien sûr) pour gérer les insertions et les extractions vers et depuis SQLite comme si je traitais des objets DateTime.

Désordonné
la source
Ne le coupe pas pour les dates si par exemple vous vouliez trier par ce champ; vous vous retrouvez avec une comparaison de chaînes ...
G__