Wie füge ich einen datetime-Wert in eine SQLite-Datenbank ein?


109

Ich versuche, einen datetime-Wert in eine SQLite- Datenbank einzufügen . Es scheint erfolgreich zu sein, aber wenn ich versuche, den Wert abzurufen, tritt ein Fehler auf:

<Daten können nicht gelesen werden>

Die SQL-Anweisungen lauten:

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

Antworten:


152

Das Format, das Sie benötigen, ist:

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

dh JJJJ-MM-TT HH: mm: ss

Verwenden Sie jedoch nach Möglichkeit eine parametrisierte Abfrage, da Sie sich keine Gedanken über die Formatierungsdetails machen müssen.


Wie ordnet man mit solchen Zeichenfolgen nach Datum?
Igor Ganapolsky

3
Wenn Sie solche Daten formatieren, funktionieren die Datumsreihenfolge und die lexikalische Reihenfolge gleich. ZB '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01' sowohl als Zeichenfolge als auch als Datum. Sie müssen sich jedoch nicht unbedingt darum kümmern, da SQLite ORDER BY die Bestellung für Sie übernimmt.
Itowlson

7
Beachten Sie, dass Sie Daten in lexikalischer Reihenfolge nicht zuverlässig mit unterschiedlicher Genauigkeit vergleichen können, z. B. "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" gibt 1 zurück, aber "SELECT datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" gibt 0 zurück.
Shane

@itowlson Wie funktioniert das, wenn Sie eine mehrsprachige Anwendung haben?
Batmaci

46

Die Art und Weise, Daten in SQLite zu speichern, ist:

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

SQLite verfügt auch über einige Datums- und Uhrzeitfunktionen, die Sie verwenden können. Siehe SQL als von SQLite verstanden, Datums- und Zeitfunktionen .


3
Zu .xxxxxxIhrer Information , hier in der Syntax von @ TorValamo = .SSS=% f in der SQLite-Dokumentation, dh in Sekundenbruchteilen.
Flak DiNenno

2
DateTime.parse ('2016-05-28 14:27:00 -0300'). Strftime ('% Y-% m-% d% H:% M:% S')
rodvlopes

17

Sie müssen das Format der von Ihnen angegebenen Datumszeichenfolge ändern, um sie mit der Funktion STRFTIME einfügen zu können. Grund dafür ist, dass es keine Option für eine Monatsabkürzung gibt:

%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
%%  % 

Die Alternative besteht darin, Datum und Uhrzeit in ein bereits akzeptiertes Format zu formatieren:

  1. JJJJ-MM-TT
  2. JJJJ-MM-TT HH: MM
  3. JJJJ-MM-TT HH: MM: SS
  4. JJJJ-MM-TT HH: MM: SS.SSS
  5. JJJJ-MM-TTTHH: MM
  6. JJJJ-MM-TTTHH: MM: SS
  7. JJJJ-MM-TTTHH: MM: SS.SSS
  8. HH: MM
  9. HH: MM: SS
  10. HH: MM: SS.SSS
  11. jetzt

Referenz: SQLite-Funktionen für Datum und Uhrzeit


Obwohl nicht in der Tabelle aufgeführt, heißt es in den Dokumenten auch, dass Sie 'Z' oder Offsets wie '-0400'
hinzufügen können

10

Verwenden CURRENT_TIMESTAMPSie, wenn Sie es brauchen, anstelle von OF NOW()(das ist MySQL)


1
das funktioniert, eins ist falsch. CURRENT_TIMESTAMP gibt datetime ohne UTC zurück. Wissen Sie, wie Sie dieses Problem beheben können? Danke im Voraus!
Ulug'bek Ro'zimboyev

8

Lesen Sie dies : 1.2 Dateund Zeit Datentyp Der beste Datentyp zum Speichern von Datum und Uhrzeit ist:

TEXT Das beste Format ist: yyyy-MM-dd HH:mm:ss

Dann lesen Sie diese Seite; Dies ist am besten über Datum und Uhrzeit in zu erklären SQLite. Ich hoffe das hilft dir


5
Sie sollten erwägen, die Frage mit Links zu beantworten, die Ihre Antwort unterstützen, nicht nur mit einer Reihe von Links
Gonzalo.-

0

Dies ist möglicherweise nicht die beliebteste oder effizienteste Methode, aber ich verzichte in SQLite auf starke Datentypen, da sie ohnehin alle im Wesentlichen als Zeichenfolgen gespeichert werden.

Ich habe zuvor einen dünnen C # -Wrapper um die SQLite-Bibliothek geschrieben (natürlich bei Verwendung von SQLite mit C #), um Einfügungen und Extraktionen von und nach SQLite so zu behandeln, als würde ich mich mit DateTime-Objekten befassen.


Schneidet es nicht für Datumsangaben, wenn Sie z. B. nach diesem Feld sortieren möchten. Sie erhalten einen String-Vergleich ...
G__
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.