[[Ruby]]
ソート、抜粋、削除をしてみましょうか。
めんどくさいので今回はrubyを使わず素のコマンドで書くけど、実際には db.executeの中で使うのよ?
* 対象のデータ [#o79e0462]
こんな感じに作ってあるデータテーブルね。
db = SQLite3::Database.new("access1.db")
db_name = "accessed"
newsql = <<SQL
CREATE TABLE #{db_name} (
yymmdd integer,
date text,
title text,
url text,
source text
);
SQL
db名は上の通り、"accessed" になってるわね。URLリクエストを出すと、そこのデータをfirefoxで読み込んでDBに蓄えるってオモチャの一部なのでこんな名前なんだけど、気にしないで。
* 抜粋&ソート表示。 [#q1c3f8bd]
whareで抜粋、さらに続けて order by カラム名 昇降(asc/desc) でソートね。続けて書けるのが面白いわね。
$ sqlite3 access1.db "select yymmdd,date,title from accessed"
20161109142613|Wed Nov 9 14:26:13 2016|sqlite3 コマンド | コマンドの使い方(Linux) | hydroculのメモ
20161109144208|Wed Nov 9 14:42:08 2016|トリガーの削除 - SQLite入門
20161109152908|Wed Nov 9 15:29:08 2016|データの削除(DELETE文) - SQLite入門
20161109153005|Wed Nov 9 15:30:05 2016|大釜隧道
20161109153410|Wed Nov 9 15:34:10 2016|大釜隧道
** yymmddが 2016/11/19 15:00:00より新しいものだけを、さらにyymmddの降順で。 [#ie20264b]
$ sqlite3 access1.db "select yymmdd,date,title from accessed where yymmdd > 20161109150000 order by yymmdd desc"
20161109153410|Wed Nov 9 15:34:10 2016|大釜隧道
20161109153005|Wed Nov 9 15:30:05 2016|大釜隧道
20161109152908|Wed Nov 9 15:29:08 2016|データの削除(DELETE文) - SQLite入門
* 削除 [#j7363400]
で、削除はどうするかなんだけど。
結論からいうとwhereで条件をそろえてやるのね。
ところで注意がひとつ。
以下のように書くとテーブルの中身が全部消えちゃうから絶対やらないで。
$ sqlite3 access1.db "delete from accessed"
これは絶対ダメ。やっちゃダメよ絶対。絶対だからね! (そしてポチっとな)
推奨は以下ね。
$ sqlite3 access1.db "delete from accessed where yymmdd < 20161109120000"
yymmddってフィールドに入っているのは「 yyyy/mm/dd HH:MM:SS 」って例のアレなので、要は日時ね。これを整数化したフィールドなわけ。
だから上の指定は、2016年11月9日の12:00:00より古いものを消しなさいって事になるわね。