Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

SQLiteの時間型……はないが関数はある。

SQLiteには、明確な時間型というのがありません。
かわりに、文字列やユリウス暦UNIX時間を数値化できる各種関数をもってサポートしています。

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

実際のところ

今の日付・時間

時間はtime関数、日付はdate関数、全部ほしければdatetime関数です

SELECT time('now');
/* 12:04:12 */

SELECT date('now');
/* 2016-09-14 */

SELECT datetime('now');
/* 2016-09-14 12:06:03 */

UNIX時間で欲しい場合はstrftime関数です。
記法はよくあるprintf系

SELECT strftime('%s', "2016-09-08");

テーブルの作成

上記の通り、決まったデータ型はないので遣りやすい方法でやればいいでしょう。
私は楽したいのでTEXT型。

CREATE TABLE blog(body TEXT, date TEXT);

データの挿入

現在の日付を入れたいだけなら、date('now')で入る親切設計。
……INTEGER形式で入れる場合はstrftime('%s', 'now')でコンバートしてから

INSERT INTO blog VALUES ("my first blog post.", date('now'));

日付の指定も出来ます。
……間違って「最初の投稿」が二個になっちゃいましたね。
これは後でフォローします。

INSERT INTO blog VALUES ("my first blog post.", date("2016-09-16"));
INSERT INTO blog VALUES ("my second blog post.", date("2016-09-16"));

検索

検索するにはWHERE節で。
私は楽したいので文字列でやってます。
高速にやりたい人はUNIX時間とかでも良いでしょう。

SELECT body FROM blog WHERE date(date) = '2016-09-16';
/*
my first blog post.
my second blog post.
*/

削除

先ほど二個作ってしまった"最初の投稿"を消しましょう

DELETE FROM blog WHERE date(date) = '2016-09-16' AND body = 'my first blog post.';

SELECT * FROM blog;
/*
my first blog post.|2016-09-14
my second blog post.|2016-09-16
*/