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!