- 投稿日:2019-03-02T19:37:36+09:00
postgreSQLでバイト指定で文字列を切り出す
初めに
PostgreSQLには標準に用意されていない、バイト数指定で文字列を切り出す方法です。
substrbyte.sqlselect 'あいうえお' ,substring('あいうえお'::bytea ,1,3) ,substring('あいうえお'::bytea ,1,3)::text --バイト指定で文字列を切り出す。 ,convert_from(substring('あいうえお'::bytea ,4,3), 'UTF8') --※convert_fromは指定したencodingに変換できない場合エラー --,convert_from(substring('あいうえお'::bytea ,5,3), 'UTF8')
- 投稿日:2019-03-02T16:07:47+09:00
ノンプログラマー、はじめてのSQL
全く知識のない状態からSQLを叩けるようになるまで何をしたかをざっくりまとめました。因みに大体二週間程度でそこそこ書けるようになりました。
自己紹介
元公務員志望のバリバリ文系大学生。プログラミングはPythonをたまに書くくらいの感じで知識は特にない。Qiita初投稿なのでなにか変なところあったら言ってください。
SQLを始めた背景
ノリと勢いで某IT企業の長期インターンに参加。そこでSQLに触れることに。Redashを自由に使っていいとのことだったのでアサインされていた業務で練習をはじめました。
はじめにやったこと
とりあえず『 SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus) 』を一周だけさらっと読んでおく。
![]()
基本を押さえておいて、あとは手を動かしながら覚えようと思っていたので、基本の構文と本のどこにどの内容が載っているかを意識して読み進めていきました。実際に書き始める
辞書の代わりに先ほどの本と『 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ』を準備。
意識したこと
- 検索・質問をしまくる
- 紙に書き出す
検索・質問をしまくる
はじめたてで、知識がないため考えたところでわからないという状態でした。少しでも躓いたら即検索、即質問が効率的だなと。便利な世の中になりましたね。どんなに些細なことでもすぐにやりました。あと、詳しい人に書いたコードについてレビューしてもらったりも。
紙に書き出す
想像してる内容を文でも図でもいいので書いてみる。私の場合、集合で考えていたのでベン図書いてそこに適宜情報追加していくような感じでした。それを設計図にすることもしばしば。
スパゲッティ職人
2週間ほどが経ち、業務にも慣れてきた・そこそこSQLにも慣れてきたという状況で怠惰な心が「一気に必要なデータを集めてしまえ」と語りかけてきて、実行。超大作イケイケコードが見事に出来上がりました。しかし、実行すると返ってこない。おかしい。これは他部署にも迷惑がかかるぞと焦りまくりサーバーの管理をしている方に頼み、キューを削除してもらいました。
原因と対処
単純な指令を集めて書いたが、元のデータが大きい+集めすぎて結局複雑すぎる指令になった(所謂スパゲッティクエリ)ことが原因となった。めっちゃ反省したとともに、いかにサーバーに負担をかけず、高速なクエリを書くかというところに焦点を当て始めた。
そこで、『SQLアンチパターン』を読むことに。この本にはわかりやすくアンチパターンや事例が掲載されており、とても勉強になりました。
最後に
といった雑な感じですがこんな感じで3週間ほど勉強したら粗削りなりにそこそこMySQLが書けるようになりました。拙い文章で恐縮でしたが、ここまで読んでいただきありがとうございました。
- 投稿日:2019-03-02T13:41:35+09:00
ActiveRecordでのレコード数のカウント方法の差(count, length, size)
- 投稿日:2019-03-02T13:41:35+09:00
[WIP]ActiveRecordでのレコード数のカウント方法の差(count, length, size)
メソッド 機能 キャッシュ利用 count SQLの COUNT
を使ってカウントしない length SQLの 実行結果の行数
をカウントする size SQLの COUNT
を使ってカウントする