24

リレーションを定義するときに、挿入時に属性をタイムスタンプに更新したいと思います。たとえば、私が今持っている作業テーブル

CREATE TABLE t1(
id INTEGER PRIMARY KEY AUTOINCREMENT,
time TIMESTAMP
DEFAULT CURRENT_TIMESTAMP,
txt TEXT);

これは、挿入時にタイムスタンプを更新します。たとえば、insert into t1 (txt) values ('hello')行を追加し1|2012-07-19 08:07:20|hello|ます。ただし、この日付をunixepoch形式でフォーマットしたいと思います。

ドキュメントを読みましたが、これは明確ではありませんでした。たとえば、テーブルリレーションをに変更しましtime TIMESTAMP DEFAULT DATETIME('now','unixepoch')たが、エラーが発生します。ここでは、ドキュメントのように、now私の時間文字列でありunixepoch、修飾子でしたが、機能しませんでした。誰かがそれをunixepochタイムスタンプとしてフォーマットする方法を教えてもらえますか?

4

3 に答える 3

52

使用strftime

sqlite> select strftime('%s', 'now');
1342685993

次のように使用しCREATE TABLEます。

sqlite> create table t1 (
   ...> id integer primary key,
   ...> time timestamp default (strftime('%s', 'now')),
   ...> txt text);
sqlite> insert into t1 (txt) values ('foo');
sqlite> insert into t1 (txt) values ('bar');
sqlite> insert into t1 (txt) values ('baz');
sqlite> select * from t1;
1|1342686319|foo
2|1342686321|bar
3|1342686323|baz

https://www.sqlite.org/lang_createtable.html#tablecoldefを参照してください

列のデフォルト値が括弧内の式である場合、式は挿入された行ごとに1回評価され、結果は新しい行で使用されます。

于 2012-07-19T08:20:15.620 に答える
17

'timestamp'はSQLiteに認識されているデータ型ではないことに注意してください(ここのリストを参照)。strftime()によって生成されたデフォルト値は、実際にはTextとして保存されます。

値を文字列ではなく数値として格納することが重要な場合は、フィールドを整数として宣言し、次のようにCAST()をミックスに追加します。

create table t1(
...
ts_field integer(4) default (cast(strftime('%s','now') as int)),
...
);
于 2015-04-02T18:33:06.103 に答える
3

確かにstrftimeは、次のように使用することもできます。

SELECT strftime('%s', timestamp) as timestamp FROM ... ;

あなたにあげる:

1454521888

current_timestamp'timestamp'テーブル列は、デフォルトとして使用して、テキストフィールドにすることもできます。

strftimeなし:

SELECT timestamp FROM ... ;

あなたにあげる:

2016-02-03 17:51:28

于 2016-02-03T18:02:02.570 に答える