[[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より古いものを消しなさいって事になるわね。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS