Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:MySQL

使う機会はあまり無い気もするけど、何かの時に使えると便利かもしれないMySQLの文字列関数をざっくり紹介。


1. CONCAT - 文字列を連結

SELECT CONCAT('Ma', 'ria', 'DB'); -- 'MariaDB'

引数はいくつでもOK。ちなみに、「--」はSQLのコメント記法。


2. SUBSTRING - 文字列を指定した位置で切り出し

上は標準SQL。下はMySQL独自。

・前から6番目以降の文字列を取得
SELECT SUBSTRING('Knowledgebase' FROM 5); -- 'edgebase'
SELECT SUBSTRING('Knowledgebase',5); -- 'edgebase'

・前から3番目以降、7文字を取得
SELECT SUBSTRING('Knowledgebase',FROM 3, FOR 7); -- 'wledgeb'
SELECT SUBSTRING('Knowledgebase',3,7); -- 'wledgeb'


3. SUBSTRING_INDEX - 文字列を分割

第一引数の文字列を、第二引数のデリミタで分割し、第三引数の値より前の文字列を返す。第三引数を負の数にすると後ろからになる。

SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', 1); -- 'kb'
SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', 2); -- 'kb.askmonty'
SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', 3); -- 'kb.askmonty.org'
SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', -1); -- 'org'
SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', -2); -- 'askmonty.org'
SELECT SUBSTRING_INDEX('kb.askmonty.org', '.', -3); -- 'kb.askmonty.org'


4. RIGHT/LEFT - 右/左から指定文字列を返す

SELECT RIGHT('MariaDB', 2); -- 'DB'
SELECT LEFT('MariaDB', 2); -- 'Ma'


5. UPPER/LOWER - 文字列を全部大文字/小文字に変換

SELECT UPPER('MariaDB'); -- 'MARIADB'
SELECT LOWER('MariaDB'); -- 'mariadb'


6. TRIM - 与えた文字列の前後から空白を除去

SELECT TRIM('     hoge     '); -- 'hoge'


7. LENGTH/CHAR_LENGTH - 与えた文字列のバイト数/文字数を返す

SELECT LENGTH('MariaDB'); -- 7
SELECT LENGTH('マリア'); -- 9
SELECT CHAR_LENGTH('MariaDB'); -- 7
SELECT CHAR_LENGTH('マリア'); -- 3


8. CAST - 文字列を指定した型に変換

SELECT CAST('2013-07-02 00:00:00' AS DATE);


9. LOCATE - 検索文字列の出現位置を取得

SELECT LOCATE('bar', 'foobarbar'); -- 4


10. REPLACE - 文字列置換

SELECT REPLACE('www.mariadb.org', 'w', 'Ww'); -- 'WwWwWw.mariadb.org'


MySQLで使える文字列関数の完全なリストは公式ドキュメントを参照。

また、MySQL互換DBであるMariaDBのドキュメントも構成が分かりやすくてオススメ(ただし、現在は英語版のみ)。

あけましておめでとうございます。2012年に読んだ技術書のまとめ兼、2013年の抱負です。


☆HTML/CSS

HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる
HTML/XHTML&スタイルシートレッスンブック

2月に読了。XHTML1.0を使用したマークアップの入門書。CSS2も同時に習得できます。最初からHTML5を学べる入門書も出てきていますが、XHTML1.0のマークアップはHTML5を書く上で基礎となるものです。本書が、HTMLマークアップの優れた入門書である点は現在でも変わりありません。オススメ。


HTML5+CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応
HTML5+CSS3で作る 魅せるiPhoneサイト

3月に読了。iOSデバイスに対応したサイト構築方法が学べます。「iPhoneサイト」であって「スマホサイト」ではないので、Android対応に関しては一切触れてません。


2013年は、HTMLに関しては「これをやりたい」ってあんまり無いんですよねえ。CSSに関しては、SCSS/LESSあたりには興味があります(やるとは言ってないw)。


☆JavaScript/jQuery

マンガでわかるJavaScript
マンガでわかるJavaScript

3月に読了。11月に再読。3月時点では分からないところは飛ばして読みました。11月時点では、JavaScriptのオブジェクト指向の理解が進みました。漫画はゆるくて面白いものの、サンプルコードが退屈なのが弱点。Webサイトマンガで分かるJavaScriptプログラミング講座の書籍版です。


Web制作の現場で使う jQueryデザイン入門 (WEB PROFESSIONAL)
Web制作の現場で使う jQueryデザイン入門

4月に読了。実践的なサンプルコードが充実しているうえ、商用利用可! 職場に1冊jQuery本を置いとくならコレ。基礎編は入門に適した内容になっているものの、実践編はプログラミング初心者にはツラい(正規表現が登場したりする)。jQuery学習書としてはWebデザイナーのための jQuery入門の方がオススメ。


jQuery ポケットリファレンス (POCKET REFERENCE)
jQuery ポケットリファレンス

調べ物用。jQuery1.4対応。公式リファレンスを見ても分からない、って時に、本書を読んだら解決したりする。


Head First JavaScript ―頭とからだで覚えるJavaScriptの基本
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

11月に読了。本の構成が初心者に優しくないうえ、邦訳が雑。非推奨。


JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技
JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

若手IT勉強会のため購入。マニアックなネタが多いので、中級者以上向け。


他に、JavaScript本格入門も買いましたが、未読。JavaScriptはしっかりやりたいなと思いつつも、いまいちやれてない。仕事で全然使ってないのが一因ですね。今年、どの程度やるかも、仕事次第。


☆PHP

PHP公式資格教科書 PHP5技術者認定初級試験対応 (EXPERT EXPASS)
PHP公式資格教科書 PHP5技術者認定初級試験対応

半分ほど読んで積ん読。環境構築は載ってないので、初心者向けではありません。非常に易しい内容と、妙にマニアックな内容(ビット演算とか)が混在しています。資格に関しては、受験料1万2千円と聞いて取るのをやめました。


よくわかるPHPの教科書
よくわかるPHPの教科書

4月に読了。プログラミング初心者でもOK。読みやすくて分かりやすいのですが、ある程度学習が進んでから読み返すと粗の見えてくる本でもあります。

代替となる入門書としては、プリペアードステートメントを使ってて感心したいきなりはじめるPHP(ただし本のレイアウトに難あり)や、「PHPの会社」アシアルのイラストでよくわかるPHPあたりが良いかな、と。

いずれも200ページ前後で、300ページある『よくわかるPHPの教科書』よりも情報量は少ないです。プログラミング未経験者のPHP入門は、「これ1冊でOK」な500ページ以上あるような入門書にいきなり取り組むより、薄い入門書を1冊読んでプログラミングの感じをつかむ → 充実した入門書を1冊読んで知識を本格化する という流れの方が挫折しにくいと思います。

※「充実した」の基準:MySQLは必須、オブジェクト指向まで載っているとbetter


Webサイト制作者のための PHP入門講座
Webサイト制作者のための PHP入門講座

8割ほど読んだところで積ん読。残りはCodeIgniterが必要になったら読む予定。Hello Worldからフレームワークまで一気に駆け抜ける。PHPのコードは、セキュリティにもしっかり気を配っていて好印象です。MySQLを全く扱っていないのが弱点で、オススメには一歩足りず。


Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本
Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本

11月に読了。PHPとMySQLの基礎を固める本。オブジェクト指向が抜けているのは残念だが、HTTP通信の話やDB関係は充実している。2008年の本。MySQLの設定等、現在では通用しない部分もあるので、オススメには一歩足りない。


PHP 逆引きレシピ (PROGRAMMER’S RECiPE)
PHP 逆引きレシピ

調べ物用。「こういう機能はどう作ればいいんだろう」って時に、目的から探せるので便利。オススメ。


パーフェクトPHP (PERFECT SERIES 3)
パーフェクトPHP

現在読書中。実務者向けの本。PHPの基礎も載ってますが、言語仕様のつまづきやすいポイントや、PHPのオブジェクト指向の構文等、他の言語でバリバリ書いてきた人向け。PHP実務者必読! と言いたいくらい素晴らしい内容。オススメ。

ただし、PHPでプログラミングを学んできて、オブジェクト指向は使うほうは出来るけど、クラスの設計とかはちょっと……という私のような人は苦労すると思います。


独習PHP 第2版
独習PHP 第2版

現在読書中。良くも悪くも教科書的。オブジェクト指向プログラミングを初歩からきっちり解説してあるPHPの入門書は少ないので、本書は貴重な存在。難点は、(1) Windows環境を前提とした解説(環境構築はLinux向けも載っているが、本文のコードはWindows環境) (2) 文章やサンプルコードが退屈 の2点。


PHPに関しては、パーフェクトPHPまで読み終えたら一段落つくかな、という印象です。フレームワークに関してはCake PHPを学習していこうと思います。


☆MySQL

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版

10月に読了。MySQLの解説は分かりやすく、充実している。PHPも載っているのでMySQLを利用したいPHPerには最適。HTMLも載ってるが、10年以上前のスタイルなので真似してはいけない。


SQLは、CRUD文を一応書けるよ、という程度で、セキュリティやスケーラビリティ、MySQLのチューニング等、課題が山積。2013年に力を入れたい分野の一つ。


☆Ruby

たのしい開発 スタートアップRuby
たのしい開発 スタートアップRuby

Rubyのカルチャーに触れる本。Ruby入門者の1冊目にオススメ。


たのしいRuby 第3版
たのしいRuby 第3版

しょっぱなから「メソッド」「オブジェクト」といった用語が説明なしに出てくる等、初歩から載ってる割に初心者向けの配慮が不足している。Rubyの構文の気持ちよさを体験することができたのは良かった。


Rubyに関しては、Railsやりたいなあと思いつつやれずに終わった2012年でした。2013年はRailsやります。


☆Perl

新版Perl言語プログラミングレッスン入門編
新版Perl言語プログラミングレッスン入門編

私にとって、本書は「Perl入門」というより「正規表現入門」です。Perlの構文は今ではすっかり忘れてしまいましたが、本書で学んだ正規表現は毎日のように使ってます。解説が非常に丁寧なので、Perl入門者のみならず、プログラミング初心者にもオススメします。


Perlに関しては、『Perl言語プログラミングレッスン』を再読して、積ん読になっている初めてのPerl 第6版も読んで、手元で動かすスクリプトはPerlで組めるようになりたいな、と思ってます(現在はPHPで組んでます)。


☆ActionScript

Essential ActionScript 3.0
Essential ActionScript 3.0

現在読書中。私は、オブジェクト指向プログラミングの基礎を本書で学びました。基礎からの丁寧な解説と、実際に動く本格的なアプリケーションの作成を並行して行う。私の好みにドンピシャの1冊。ただし、分量が非常に多い(邦訳紙版は900ページ超)。


ActionScriptは「JavaScriptの皮を被ったJava」です。言語も環境もよくできてると思うのだけど、世間的には衰退するという予想が多いんですよね。個人的には、Angry BirdsのようなカジュアルゲームをPC/スマートフォン両対応で出す際には、Flashが現在の最適解、と思ってます。とはいえ、私はFlash制作者になりたいわけではなく、ActionScriptは趣味です。


☆新年の抱負

やりたいことの優先順位をつけると、

SQL(MySQL) > Ruby(Rails) > JavaScript > PHP > その他

って感じですね。SQLは仕事にも関係するし、やってて楽しい分野でもあるので、最重視。Rubyは新しい世界を知るため。JavaScriptは、覇権言語になりそうなのでやっとこうかなと。PHPはライスワーク。

その他としては、正規表現(日常使いの便利ツール)、Perl(YAPCを楽しむため)、Java(オブジェクト指向を学ぶため)、C(プログラマーの一般教養)あたりをやりたいな、と。


また、特定の言語に限らないトピックとしては、自動テストの書き方、走らせ方。現在は、仕事でも(!)、プライベートでも、テストを全く書いてないので。gitに関しても、一度学びの機会を作りたい。

あと、エディタ。PHPはPhpStormで決定だけど、それ以外の言語をどのエディタで書くか。vimはサーバで設定をいじくる時に使うエディタとしては十分だけど、モードが面倒なのでメインとして使うには不安を感じる。一方、emacsはデフォルトのキーバインドがイケてないのと、カスタマイズの敷居の高さが難点。どちらかに決める突破口があれば良いのだけど。

今年もよろしくお願いします。

Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本
Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本


Head FirstシリーズのPHP&MySQL版。日本語版で、本文600ページ弱。原著の第11章「Drawing Dynamic Graphics: Visualizing Your Data... and More!」は収録されていない。

PHPは初心者でも学びやすい言語といわれることがあるが、実際には覚えるべきことは多い。データベース(PHPを使う場合、データベースはMySQLであることが多い)の知識はしっかり身につける必要があるし、HTTP通信の知識も必要。

ただし、これは他のサーバーサイド言語でも同様。PHPは、HTMLに埋め込んで使えるので、サーバーサイドのWebアプリケーション開発言語としては敷居が低い。そこが、多くのWebアプリケーションがPHPで開発される理由だろう。

本書にはオブジェクト指向は入ってないし、セキュリティ対策もまだ足りていない部分がある。また、実務ではLinuxサーバーにリモートでログインして操作することが多いので、Unixの知識も必要。。。といった具合に、不足している部分はあるのだが、「HTMLの知識はあるが、PHP及びプログラミングの知識はゼロ」な入門者に向けて書かれた本としては、かなり充実した内容になっている。本書を読み通せばサーバーサイド開発者の入り口には立てるはず。


本の構成は妥当だし、サンプルコードも「無理やり」感があまりない。また、原著のおかしな部分にツッコミを入れたり、登場人物の名前や文章を「超訳」したりと、翻訳者の頑張りとセンスが光っている。

唯一難点なのは、出版年の古さ。本書は2008年に出た本だが、MySQLはバージョン5.1以降で文字コードの設定方法が変わっている。現在の最新版はMySQL5.5なので、本書の設定方法では動かない。MySQL5.5に対応した文字コード設定に関しては、以前書いた記事があるので参考までに。

あと、日本語版のサンプルコード、私の環境(Mac OS X/Ubuntu)では文字化けやら改行コードやらで大変なことなっていた。英語版の方は問題なかった。


本書で初めてプログラミングを学ぶ、という人にはオススメしづらい。PHPの入門書を読んだけど、知識に不足を感じている人にはオススメ。

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版

500ページ以上ある本ですが、解説が丁寧なのでスムーズに進みました。以下、感想。


MySQLを学ぶうえで最初のハードルとなるのが環境構築です。本書は、WindowsにXAMPP(Apache, PHP, MySQL等がまとめられたソフトウェア)を入れ、文字コードはShift-JIS、という、読者の大多数を占めるであろうWindowsユーザーにとってフレンドリーな環境を作る方針になっています。Macユーザー向けにもMAMPの導入方法が載っています。

が、この点、私は不満です。というのも、MySQLを仕事で使う場合、そのOSはLinuxである可能性が高いからです。そして、WindowsとUnix(Linux、Mac等)では、MySQLの挙動が一部異なります。例えばテーブル名。Windows版MySQLでは大文字と小文字を区別しませんが、Unix版は区別します。「tbUser」と「tbuser」は、Windows版では同じテーブルですが、Unix版では別物です。その他のWindows版とUnix版の相違については、MySQLリファレンスが参考になります。


本書のメインである、データベース言語SQLの解説については、さすがに丁寧で充実しています。本書をやれば、基本的なCRUD文(データベースの作成、データの呼び出し、データの書き込み、データの消去)が書けるようになります。プログラマーにとって必要最低限のSQLは身につきます。また、ビュー、トランザクション、ストアドプロシージャとストアドファンクションについてもさわりだけは学べます。その先、MySQLのチューニングや、高度で複雑なSQLは、本書の守備範囲を超えます。


MySQLとセットで用いられることの多いプログラミング言語PHPについては、MySQLとの組み合わせで必要な最低限の範囲を絞って書いてあります。変数と配列、条件分岐と繰り返しといった、プログラミングの基礎に、MySQLを利用するための関数を加えた内容ですね。

WebページでのMySQL利用で問題となるSQLインジェクション対策等、セキュリティについても触れられています。自分の作ったサイトの脆弱性を自分で攻撃する、という流れが面白かったです。


HTMLに関しては、酷いの一言。本書に載っているHTMLは、10年前のそれです。XHTMLを経た現代のマークアップは、本書とは全く異なった書き方をします。まあ、タグの大文字はHTML5の仕様上はOKだし、<html><head><body>などはHTML5では省略可能とされています。ただし<FONT>、テメーはダメだ。

<FONT>タグのような、スタイル指定のための要素は、HTML5では廃止されています。<B><U><I>も同様です。ブラウザーは下方互換性を保つように作られているので、<FONT>タグを使っても当面問題となることはないでしょう。しかし、スタイル指定のための要素を使うと、HTMLを書くのにも煩雑ですし、後々のメンテナンスが大変になります。Webページのデザインの調整を行いたいなら、CSSを学ぶべきです。HTML/XHTMLスタイルシートレッスンブックのような良書があります。


後半がイケてなかったので、読後感は良くありませんが、前半のSQLの解説は丁寧です。オススメというほどではありませんが、SQLの部分だけでも元は取れるはず。あなたがMySQL初心者なら、買って損はしないでしょう。

ただ、Windows上での環境構築にせよ、HTMLタグの解説にせよ、初心者に理解しやすい内容(裏を返せば、解説の容易な内容)を選択した結果、実務の観点からするとツッコミどころがある、という点には留意すべきかと。

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

MySQLとPHPのやり直しにあたって、最初に手をつけているのが本書。手元にある本の中で、一番やさしいものだったので。実は、Software Designの懸賞で当たったものだったりします。

本書の旧版は、職場で新人研修の際に読みました。必要なところ(LEFT JOINとか)だけをつまみ食いでしたが、とても丁寧に解説されていたため、いつか通読したいなと思っていました。

この改訂版、旧版とどこが違うのかはちゃんと比較してみないと分かりませんが、一点だけ確実に違う点があります。それは、対応しているMySQLのバージョン。

旧版は2007年に出た本であり、MySQLのバージョンは5.0以前のはず。一方、現在の最新版は5.5ですが、MySQL5.1以降では文字コードの設定方法が変わっています。そのため、旧版を参考にすると、設定で詰まる可能性があります。改訂版は5.5に対応しているので、当面は安心…?

本書で解説されている環境設定はXAMPP+Shift-JIS。Windowsユーザーには取っ付き易いと思います。私はUbuntu(Linux)にMySQL Serverをインストールし、文字コードはUTF-8に設定して使っていますが、本書を進める上では問題ありません。



<正誤情報>

書籍の公式ページには、2012年9月23日現在、正誤情報の掲載がありません。1箇所誤記を見つけたので、載せておきます。

私の手元にあるのは初版第1刷ですが、p.131の最後の行、LIKE句を用いたSELECT文に誤りがあります。

SELECT * FROM tb WHERE LIKE 'A101';

となっていますが、これではエラーが返ってきます。正しくは

SELECT * FROM tb WHERE bang LIKE 'A101';

でしょう。

このページのトップヘ