回答:
フィールドのデフォルト値を宣言するだけです:
CREATE TABLE MyTable(
ID INTEGER PRIMARY KEY,
Name TEXT,
Other STUFF,
Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
ただし、INSERT
コマンドでこのフィールドを明示的にに設定した場合は、NULL
に設定されNULL
ます。
DATETIME
データ型はありませんが、SQLiteはフィールド型として何でも受け入れます。
DEFAULT (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW', 'localtime'))
1が実際に意味のあるマイクロ秒の値を取得します。
SQLiteのテーブルにTIMESTAMPフィールドを作成できます。これを参照してください:
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自動日時完了の作業例は次のようになります。
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'))
...> );
自動日時完了を開始する方法でいくつかの行を挿入しましょう:
sqlite> INSERT INTO 'test' ('id') VALUES (null);
sqlite> INSERT INTO 'test' ('id') VALUES (null);
保存されたデータは、最初の2つは同じであるが3番目の関数は同じでないことを明確に示しています。
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関数が括弧で囲まれていることに注意してください!これを1つの例で示すのはどれほど困難でしたか?
楽しんで!
トリガーを使用できます。とてもうまくいく
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;
上記の回答を補足するには...
EFを使用している場合は、プロパティをデータアノテーション[タイムスタンプ]で修飾し、コンテキストクラス内のオーバーライドされたOnModelCreatingに移動して、次のFluent APIコードを追加します。
modelBuilder.Entity<YourEntity>()
.Property(b => b.Timestamp)
.ValueGeneratedOnAddOrUpdate()
.IsConcurrencyToken()
.ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");
このテーブルに挿入されるすべてのデータにデフォルト値を作成します。
次を使用してカスタム日時を使用できます...
create table noteTable3
(created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y %H:%M', 'NOW','localtime')),
title text not null, myNotes text not null);
'NOW'、 'localtime'を使用して現在のシステム日付を取得します。それ以外の場合は、データベースに挿入した後、データベースの過去またはその他の時刻が表示されます。
ありがとうございます...