Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
前回までは、エイリアスを付けるところまでだったが、 今回はつけたエイリアスを、条件判定などに実際に利用してみよう。 条件判定は長い式になりやすいので、 条件判定式を、短く、簡潔に、分かりやすくするためにもエイリアスは効果的だ。 今回は、そういう使い方をしてみよう。
例によって、また過去のサンプルを再利用してみよう。 東京の市区町村データを用いる。
CREATE TABLE `東京` (
`名称` VARCHAR(10), `読み` VARCHAR(20), `人口` INT, `面積` FLOAT(10,2)
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms;
INSERT INTO `東京` VALUES
('千代田区','ちよだく',39551,11.64),
('中央区','ちゅうおうく',87416,10.15),
('新宿区','しんじゅくく',299808,18.23),
('世田谷区','せたがやく',835702,58.08),
('調布市','ちょうふし',214032,21.53),
('町田市','まちだし',405008,71.62),
('大島町','おおしままち',8786,91.06),
('檜原村','ひのはらむら',3004,105.42),
('小笠原村','おがさわらむら',2755,104.41);
以上の準備をして、テーブル`東京`の中味を確認しておく。
mysql> SELECT * FROM `東京`; +----------+----------------+--------+--------+ | 名称 | 読み | 人口 | 面積 | +----------+----------------+--------+--------+ | 千代田区 | ちよだく | 39551 | 11.64 | | 中央区 | ちゅうおうく | 87416 | 10.15 | | 新宿区 | しんじゅくく | 299808 | 18.23 | | 世田谷区 | せたがやく | 835702 | 58.08 | | 調布市 | ちょうふし | 214032 | 21.53 | | 町田市 | まちだし | 405008 | 71.62 | | 大島町 | おおしままち | 8786 | 91.06 | | 檜原村 | ひのはらむら | 3004 | 105.42 | | 小笠原村 | おがさわらむら | 2755 | 104.41 | +----------+----------------+--------+--------+ 9 rows in set (0.00 sec) mysql>
文字列関数 RIGHT
では、ここで、つぎの問題を考えてみよう。
区市町村がそれぞれいくつ存在するかを求めよ。
でも、市区町村を示すためのカラムは用意されていない。 これでは出来ないではないか。
と思うかも知れないが、名称の最後の漢字1文字を利用すればできそうだ。
最後の一文字を取りだす文字列関数は RIGHT であり、 12.3.1. String Comparison Functions には以下のように説明されている。
RIGHT(str,len)
Returns the rightmost len characters from the string str.
mysql> SELECT RIGHT('foobarbar', 4);
-> 'rbar'
This function is multi-byte safe.
最後に、multi-byte safe とあるので、漢字も大丈夫のはずだ。 もちろん、MySQL 4.1 以降の場合だが。
一応、RIGHT関数自体の動作確認をしておこう。
mysql> SELECT RIGHT('小笠原村',1);
+---------------------+
| RIGHT('小笠原村',1) |
+---------------------+
| 村 |
+---------------------+
1 row in set (0.03 sec)
mysql>
後は、週末に上記問題に対応するSQL文を考えることにしよう。
フィードバック:
There is no comment.