ソート、抜粋、削除をしてみましょうか。
めんどくさいので今回はrubyを使わず素のコマンドで書くけど、実際には db.executeの中で使うのよ?
こんな感じに作ってあるデータテーブルね。
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に蓄えるってオモチャの一部なのでこんな名前なんだけど、気にしないで。
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|大釜隧道
$ 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入門
で、削除はどうするかなんだけど。
結論からいうと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より古いものを消しなさいって事になるわね。