¿Cómo inserto el valor de fecha y hora en una base de datos SQLite?

109

Estoy tratando de insertar un valor de fecha y hora en una base de datos SQLite . Parece tener éxito, pero cuando intento recuperar el valor, aparece un error:

<No se pueden leer los datos>

Las declaraciones SQL son:

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

Respuestas:

153

El formato que necesita es:

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

es decir, aaaa-MM-dd HH: mm: ss

Sin embargo, si es posible, utilice una consulta parametrizada, ya que esto le liberará de preocuparse por los detalles del formato.

itowlson
fuente
¿Cómo se ordena por fecha con tales cadenas?
IgorGanapolsky
3
Cuando formatea fechas como esta, el orden por fecha y el orden léxico funcionan de la misma manera. Por ejemplo, '2008-02-01'> '2007-02-01', '2008-01-02'> '2008-01-01' tanto como cadenas como fechas. Pero no necesita preocuparse estrictamente por esto porque SQLite ORDER BY se encargará de realizar el pedido por usted.
itowlson
7
Tenga en cuenta que no puede comparar fechas de manera confiable con precisión diferente usando un orden léxico, por ejemplo, "SELECT '2007-01-02 10:00:00'> '2007-01-02 10:00';" devuelve 1 pero "SELECT datetime ('2007-01-02 10:00:00')> datetime ('2007-01-02 10:00');" devuelve 0.
Shane
@itowlson ¿Cómo funcionará esto cuando tenga una aplicación multilingüe?
batmaci
46

La forma de almacenar fechas en SQLite es:

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

SQLite también tiene algunas funciones de fecha y hora que puede utilizar. Consulte SQL entendido por SQLite, funciones de fecha y hora .

Tor Valamo
fuente
3
FYI, .xxxxxxaquí en la sintaxis de @ TorValamo = .SSS=% f en la documentación de SQLite, es decir, fracciones de segundo.
Flak DiNenno
2
DateTime.parse ('2016-05-28 14:27:00 -0300'). Strftime ('% Y-% m-% d% H:% M:% S')
rodvlopes
17

Tiene que cambiar el formato de la cadena de fecha que está proporcionando para poder insertarla usando la función STRFTIME. La razón es que no hay opción para una abreviatura de mes:

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

La alternativa es formatear la fecha / hora en un formato ya aceptado:

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

Referencia: funciones de fecha y hora de SQLite

Ponis dios mio
fuente
Aunque no se enumeran en la tabla, los documentos también establecen que puede agregar 'Z' o compensaciones como '-0400'
coolaj86
10

Úselo CURRENT_TIMESTAMPcuando lo necesite, en lugar de OF NOW()(que es MySQL)

congelación_
fuente
1
esto está funcionado, una cosa está mal. CURRENT_TIMESTAMP devuelve fecha y hora sin UTC, ¿sabe cómo resolver este problema? ¡Gracias por adelantado!
Ulug'bek Ro'zimboyev
8

Lea esto : 1.2 Datey Time Datatype mejor tipo de datos para almacenar la fecha y la hora es:

TEXT el mejor formato es: yyyy-MM-dd HH:mm:ss

Entonces lea esta página; es mejor explicar la fecha y la hora en SQLite. Espero que esto te ayude

Ali Amanzadegan
fuente
5
Debería considerar responder la pregunta, con enlaces que respalden su respuesta, no solo un montón de enlaces
Gonzalo.-
0

Puede que este no sea el método más popular o eficiente, pero tiendo a renunciar a los tipos de datos fuertes en SQLite, ya que, de todos modos, todos se descargan esencialmente como cadenas.

He escrito una envoltura delgada de C # alrededor de la biblioteca SQLite antes (cuando uso SQLite con C #, por supuesto) para manejar inserciones y extracciones hacia y desde SQLite como si estuviera tratando con objetos DateTime.

Sucio
fuente
No lo corta para las fechas si, por ejemplo, desea ordenar por ese campo; terminas con una comparación de cadenas ...
G__