sqlite データベースで、デフォルトのタイムスタンプ列を持つテーブルを作成することは可能DATETIME('now')
ですか?
このような:
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
これによりエラーが発生します... 解決方法は?
私はあなたが使用できると信じています
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
);
バージョン 3.1 以降 (ソース)
博士によると 最近のリスト投稿のヒップ:
CREATE TABLE whatever(
....
timestamp DATE DEFAULT (datetime('now','localtime')),
...
);
これは単なる構文エラーです。括弧が必要です:(DATETIME('now'))
documentationを見ると、構文の「expr」オプションの周りに括弧が追加されていることに気付くでしょう。
これは、質問に対する他の回答とコメントに基づく完全な例です。この例では、タイムスタンプ ( created_at
-column) はUNIX エポックUTC タイムゾーンとして保存され、必要な場合にのみローカル タイムゾーンに変換されます。
UNIX エポックを使用すると、ストレージ スペースが節約されます。ISO8601 文字列として格納されている場合、4 バイトの整数に対して 24 バイトの文字列です。 datatypesを参照してください。4 バイトでは不十分な場合は、6 または 8 バイトに増やすことができます。
タイムスタンプを UTC タイムゾーンで保存すると、複数のタイムゾーンで適切な値を表示するのに便利です。
SQLite のバージョンは 3.8.6 で、Ubuntu LTS 14.04 に同梱されています。
$ sqlite3 so.db
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> .headers on
create table if not exists example (
id integer primary key autoincrement
,data text not null unique
,created_at integer(4) not null default (strftime('%s','now'))
);
insert into example(data) values
('foo')
,('bar')
;
select
id
,data
,created_at as epoch
,datetime(created_at, 'unixepoch') as utc
,datetime(created_at, 'unixepoch', 'localtime') as localtime
from example
order by id
;
id|data|epoch |utc |localtime
1 |foo |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
2 |bar |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
クエリの時点で UTC+2 DST にいるため、Localtime は正しいです。
ストレージスペースを節約するには、REAL 型を使用する方がよい場合があります。
SQLite バージョン 3のデータ型の 1.2 セクションからの引用
SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t REAL DEFAULT (datetime('now', 'localtime'))
);
column-constraintを参照してください。
値を指定せずに行を挿入します。
INSERT INTO "test" DEFAULT VALUES;
括弧を書いていないので構文エラーです
あなたが書くなら
datetime('now') を選択すると utc 時刻が表示されますが、このクエリを記述する場合は、この前に括弧を追加する必要があるため、UTC 時刻には (datetime('now')) を指定します。現地時間の場合と同じ クエリに datetime('now','localtime') を選択
(datetime('今','現地時間'))