Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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
*/