yyyy type date_format current create convert c# sqlite timestamp

c# - type - ¿Cómo tener una marca de tiempo automática en SQLite?



sqlite date format dd/mm/yyyy (6)

Tengo una base de datos SQLite, versión 3 y estoy usando C # para crear una aplicación que usa esta base de datos.

Quiero utilizar un campo de marca de tiempo en una tabla para concurrencia, pero me doy cuenta de que cuando inserto un nuevo registro, este campo no está establecido y es nulo.

Por ejemplo, en MS SQL Server si utilizo un campo de marca de tiempo, la base de datos lo actualiza, no tengo que configurarlo solo. ¿Es esto posible en SQLite?


Al leer datefunc un ejemplo de trabajo de finalización automática de la fecha y hora sería:

sqlite> CREATE TABLE ''test'' ( ...> ''id'' INTEGER PRIMARY KEY, ...> ''dt1'' DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, ''localtime'')), ...> ''dt2'' DATETIME NOT NULL DEFAULT (strftime(''%Y-%m-%d %H:%M:%S'', ''now'', ''localtime'')), ...> ''dt3'' DATETIME NOT NULL DEFAULT (strftime(''%Y-%m-%d %H:%M:%f'', ''now'', ''localtime'')) ...> );

Insertemos algunas filas de forma que inicie la finalización automática de la fecha y hora:

sqlite> INSERT INTO ''test'' (''id'') VALUES (null); sqlite> INSERT INTO ''test'' (''id'') VALUES (null);

Los datos almacenados muestran claramente que los primeros dos son iguales pero no la tercera función:

sqlite> SELECT * FROM ''test''; 1|2017-09-26 09:10:08|2017-09-26 09:10:08|2017-09-26 09:10:08.053 2|2017-09-26 09:10:56|2017-09-26 09:10:56|2017-09-26 09:10:56.894

¡Presta atención a que las funciones de SQLite estén entre paréntesis! ¿Qué tan difícil fue esto para mostrarlo en un ejemplo?

¡Que te diviertas!


Para complementar las respuestas anteriores ...

Si está utilizando EF, adornar la propiedad con Anotación de datos [Indicación de fecha y hora], luego ir a OnModelCreating modificado, dentro de su clase de contexto, y agregar este código de API de Fluidez:

modelBuilder.Entity<YourEntity>() .Property(b => b.Timestamp) .ValueGeneratedOnAddOrUpdate() .IsConcurrencyToken() .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");

Hará un valor predeterminado para cada dato que se insertará en esta tabla.


Puede crear el campo TIMESTAMP en la tabla en el SQLite, vea esto:

CREATE TABLE my_table ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(64), sqltime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ); INSERT INTO my_table(name, sqltime) VALUES(''test1'', ''2010-05-28T15:36:56.200''); INSERT INTO my_table(name, sqltime) VALUES(''test2'', ''2010-08-28T13:40:02.200''); INSERT INTO my_table(name) VALUES(''test3'');

Este es el resultado:

SELECT * FROM my_table;


Simplemente declare un valor predeterminado para un campo:

CREATE TABLE MyTable( ID INTEGER PRIMARY KEY, Name TEXT, Other STUFF, Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP );

Sin embargo, si su comando INSERT establece explícitamente este campo en NULL , se establecerá en NULL .


puede usar la fecha y hora personalizada usando ...

create table noteTable3 (created_at DATETIME DEFAULT (STRFTIME(''%d-%m-%Y %H:%M'', ''NOW'',''localtime'')), title text not null, myNotes text not null);

use ''NOW'', ''localtime'' para obtener la fecha actual del sistema, de lo contrario mostrará alguna hora pasada u otra en su base de datos después del tiempo de inserción en su db.

Gracias...


puedes usar disparadores funciona muy bien

CREATE TABLE MyTable( ID INTEGER PRIMARY KEY, Name TEXT, Other STUFF, Timestamp DATETIME); CREATE TRIGGER insert_Timestamp_Trigger AFTER INSERT ON MyTable BEGIN UPDATE MyTable SET Timestamp =STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'') WHERE id = NEW.id; END; CREATE TRIGGER update_Timestamp_Trigger AFTER UPDATE On MyTable BEGIN UPDATE MyTable SET Timestamp = STRFTIME(''%Y-%m-%d %H:%M:%f'', ''NOW'') WHERE id = NEW.id; END;