Come avere un timestamp automatico in SQLite?

Come avere un timestamp automatico in SQLite?

Basta dichiarare un valore predefinito per un campo:

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

Tuttavia, se il tuo INSERT comando imposta esplicitamente questo campo su NULL , verrà impostato su NULL .


Puoi creare il campo TIMESTAMP nella tabella su SQLite, vedi questo:

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');

Questo è il risultato:

SELECT * FROM my_table;


Leggendo datefunc un esempio funzionante di completamento automatico datetime sarebbe:

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'))
   ...> );

Inseriamo alcune righe in modo da avviare il completamento automatico di datetime:

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

I dati memorizzati mostrano chiaramente che le prime due sono le stesse ma non la terza funzione:

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

Fai attenzione che le funzioni SQLite sono racchiuse tra parentesi! Quanto è stato difficile mostrarlo in un esempio?

Buon divertimento!