Как иметь автоматическую метку времени в SQLite?
У меня есть база данных SQLite, версия 3, и я использую C# для создания приложения, которое использует эту базу данных.
Я хочу использовать поле timestamp в таблице для параллелизма, но я замечаю, что когда я вставляю новую запись, это поле не задано и равно null.
например, в MS SQL Server, если я использую поле timestamp, это обновляется базой данных, я не должен устанавливать сам. возможно ли это в SQLite?
6 ответов:
просто объявить значение по умолчанию для поля:
, еслиCREATE TABLE MyTable( ID INTEGER PRIMARY KEY, Name TEXT, Other STUFF, Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP );INSERTкоманда явно устанавливает это поле вNULL, он будет установлен вNULL.
вы можете создать поле метки времени в таблице на SQLite, см. Это:
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');вот результат:
SELECT * FROM my_table;
чтение datefunc рабочий пример автоматического завершения datetime будет:
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')) ...> );давайте вставим несколько строк таким образом, чтобы инициировать автоматическое завершение datetime:
sqlite> INSERT INTO 'test' ('id') VALUES (null); sqlite> INSERT INTO 'test' ('id') VALUES (null);сохраненные данные ясно показывают, что первые два являются одинаковыми, но не третья функция:
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обратите внимание, что функции SQLite заключены в скобки! Насколько сложно было это показать на одном примере?
есть весело!
чтобы дополнить ответы выше...
Если вы используете EF, украсьте свойство аннотацией данных [Timestamp], затем перейдите к переопределенному OnModelCreating, внутри вашего класса контекста, и добавьте этот свободный код API:
modelBuilder.Entity<YourEntity>() .Property(b => b.Timestamp) .ValueGeneratedOnAddOrUpdate() .IsConcurrencyToken() .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");это сделает значение по умолчанию для всех данных, которые будут вставлены в эту таблицу.
вы можете использовать пользовательский datetime с помощью...
create table noteTable3 (created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y %H:%M', 'NOW','localtime')), title text not null, myNotes text not null);используйте "сейчас", "локальное время", чтобы получить текущую системную дату, иначе она покажет некоторое прошлое или другое время в вашей базе данных после времени вставки в вашу БД.
Спасибо Вам...
вы можете использовать триггеры. работает очень хорошо
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;

Comments