Come inserisco il valore datetime in un database SQLite?


109

Sto cercando di inserire un valore datetime in un database SQLite . Sembra essere sufficiente ma quando provo a recuperare il valore si verifica un errore:

<Impossibile leggere i dati>

Le istruzioni SQL sono:

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

Risposte:


153

Il formato che ti serve è:

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

cioè aaaa-MM-gg HH: mm: ss

Se possibile, tuttavia, utilizzare una query parametrizzata in quanto ciò ti libera dalla preoccupazione per i dettagli di formattazione.


Come si ordina per data con tali stringhe?
IgorGanapolsky

3
Quando formatti date in questo modo, l'ordine delle date e l'ordinamento lessicale funzionano allo stesso modo. Ad esempio "2008-02-01"> "2007-02-01", "2008-01-02"> "2008-01-01" sia come stringhe che come date. Ma non devi preoccuparti di questo perché SQLite ORDER BY si prenderà cura di ordinare per te.
itowlson

7
Si noti che non è possibile confrontare in modo affidabile le date con una precisione diversa utilizzando l'ordinamento lessicale, ad esempio "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" restituisce 1 ma "SELECT datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" restituisce 0.
Shane

@itowlson Come funzionerà quando si dispone di un'applicazione multilingue?
batmaci

46

Il modo per memorizzare le date in SQLite è:

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

SQLite ha anche alcune funzioni di data e ora che puoi usare. Vedere SQL come compreso da SQLite, funzioni di data e ora .


3
Cordiali saluti, .xxxxxxqui nella sintassi di @ TorValamo = .SSS=% f nella documentazione di SQLite, cioè frazioni di secondo.
Flak DiNenno

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

17

Devi cambiare il formato della stringa della data che stai fornendo per poterla inserire utilizzando la funzione STRFTIME. Il motivo è che non c'è opzione per l'abbreviazione di un mese:

%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'alternativa è formattare la data / ora in un formato già accettato:

  1. AAAA-MM-DD
  2. AAAA-MM-GG HH: MM
  3. AAAA-MM-GG HH: MM: SS
  4. AAAA-MM-GG HH: MM: SS.SSS
  5. AAAA-MM-GGTHH: MM
  6. AAAA-MM-GGTHH: MM: SS
  7. AAAA-MM-GGTHH: MM: SS.SSS
  8. HH: MM
  9. HH: MM: SS
  10. HH: MM: SS.SSS
  11. adesso

Riferimento: funzioni Data e ora di SQLite


Sebbene non siano elencati nella tabella, i documenti affermano anche che puoi aggiungere "Z" o offset come "-0400"
coolaj86

10

Usalo CURRENT_TIMESTAMPquando ne hai bisogno, invece di NOW()(che è MySQL)


1
questo funziona, una cosa è sbagliata. CURRENT_TIMESTAMP restituisce datetime senza UTC, sai come risolvere questo problema. Grazie in anticipo!
Ulug'bek Ro'zimboyev

8

Leggi questo : 1.2 Datee ora Tipo di dato miglior tipo di dati di data e ora negozio è:

TEXT il formato migliore è: yyyy-MM-dd HH:mm:ss

Allora leggi questa pagina; è meglio spiegare la data e l'ora in SQLite. Spero che questo ti sia d'aiuto


5
Dovresti considerare di rispondere alla domanda, con link che supportano la tua risposta, non solo un mucchio di link
Gonzalo

0

Questo potrebbe non essere il metodo più popolare o efficiente, ma tendo a rinunciare a tipi di dati forti in SQLite poiché sono tutti essenzialmente scaricati come stringhe comunque.

Ho già scritto un sottile wrapper C # attorno alla libreria SQLite (quando si utilizza SQLite con C #, ovviamente) per gestire gli inserimenti e le estrazioni da e verso SQLite come se avessi a che fare con oggetti DateTime.


Non lo taglia per le date se ad esempio si desidera ordinare in base a quel campo; si finisce con un confronto di stringhe ...
G__
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.