トップ «前の日(02-18) 最新 次の日(02-20)» 追記

おいぬま日報(不定期)

カテゴリ | 技術情報まとめWiki | 検索エンジンから来た人向け | RSS

2003年
2月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28



2003-02-19

@ [java] Chainsaw

log4jが吐くログをビジュアルに見ようじゃないか、というプロジェクト。

@ 深夜にも禿げしくリリース

1日に3回もリリースとは... 3度の飯よりプログラミングが好きということらしい

@ [work] ボーリング大会

今日は今出向中の部署でボーリング大会があったので、それに参加してきました。成績はまぁ普通だったわけなんですが、15位賞(なんだそれ?)で音楽ギフトカード2000円分をもらった。CDは割と買う方なのでとってもラッキー。

本日のツッコミ(全6件) [ツッコミを入れる]

# まこと [どんなの聞くんですか?]

# おいぬめ [KORN, RATMなどのヘビィ・ロックでしょうか...]

# まこと [あー、最近のだなあ。Kula Shakerとかがわたしの一番最新かも。。。]

# おいぬめ [Kula Shakerが最新? 他にはどんなの聴くんですか?]

# まこと [私の守備範囲は、HR/HM、パンク、ブルーズあたりですねえ。ギター弾きだったりするのでどうしても。]

# おいぬめ [んー、HR/HMは昔ちょろっと聞いたぐらいですねぇ。パンクってNoFXとかRancidですか?]


2005-02-19

@ [ruby] Pure RubyのMySQL, PostgreSQLドライバ

Rubyのデータベースドライバってずっと拡張ライブラリしかないものだと思ってたのですが、るびまを見て、Pure Rubyで実装されたRuby/MySQLpostgres-prがあることを知りました。拡張ライブラリだと「Windowsでも動くんかいな?」ということを心配していたのですが、これでそんな心配は無用ですね。


2008-02-19

@ [mysql] MySQLの便利なフロー制御関数

あんまり知られていなさそうなMySQLの便利な関数があるので、ちょこっと紹介してみます。詳しくはMySQL本家のマニュアルを見てもらいたいのですが、以下簡単に説明。

IF(expr1,expr2,expr3)

SQLで条件分岐を行いたい場合、普通は

CASE WHEN 条件 THEN 真の場合 ELSE 偽の場合 END;

みたいな書き方がSQL標準ですが、MySQLではこれをもっと簡潔に書けるIFという関数があります。

IF(expr1,expr2,expr3)

マニュアルそのままですが「expr1 が TRUE(expr1 <> 0 および expr1 <> NULL)の場合 IF() は expr2 を返し、それ以外の場合は expr3 を返す。」という仕様です。例えば

SELECT IF(1 = 1,"true","false");

というSQLは "true" を返します。CASE文の場合記述量が多いのでSQLとしては非常に見にくくなってしまうというデメリットがありますが、このIFの場合カンマで区切るだけなのですっきりしていて見易いです。

IFNULL(expr1,expr2)

こちらは「expr1 が NULL でない場合は expr1 を返し、それ以外の場合は expr2 を返す。」という関数です。この関数の使いどころは、NULL値がっ入っているかもしれないカラムに対して演算を行う場合です。

mysql> select * from test;
+------------+--------+
| date       | charge |
+------------+--------+
| 2008-01-01 |   NULL |
| 2008-01-02 |   1000 |
| 2008-01-03 |   2000 |
+------------+--------+

というデータがあるとして、

select charge / 100 from test;

というSQLを実行すると

+--------------+
| charge / 100 |
+--------------+
|         NULL |
|      10.0000 |
|      20.0000 |
+--------------+

のように1行目はNULLになってしまいますが、IFNULLを使って

mysql> select IFNULL(charge, 0) / 100 from test;
+-------------------------+
| IFNULL(charge, 0) / 100 |
+-------------------------+
|                  0.0000 |
|                 10.0000 |
|                 20.0000 |
+-------------------------+

のように、chargeの値をNULLではなくゼロとして計算させることができます。

COALESCE(list)

IFNULLと非常に似た関数として、SQL標準のCOALESCEというものもあります。これは引数のリストの中で最初の非NULL値を返す関数で、可変個の引数を受け付けます。例えば

SELECT COALESCE(NULL, NULL, 1);

の実行結果は 1 になります。IFNULLが2つの引数しか取らないのに対して、こちらは任意の個数の引数を渡せるというメリットがあります。あと、SQL標準なのでMySQL以外でも使えます。

SQLはかれこれ5年ぐらい使っているのですが、DB依存の関数や仕組みに関してはまだまだ勉強するところはたくさんありそうです。


Bookmark: あんてな | ぶっくまーく | 覚え書き | Project Amateras | ExcelPettyCashBook | FreeStyle Wiki

2002|10|11|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|11|12|
2008|01|02|03|04|05|06|07|08|10|11|12|
人気ブログランキング - おいぬま日報(不定期)