プログラマー必見!! 簡単なWhere句の制御 | スズムシのSE語録

スズムシのSE語録

滋賀でシステム開発を行うWINDURSTの代表、スズムシです

代表はヲタクでございますw

今日はプログラマー必見! プラグラムで簡単にSQLの "Where句を書く"方法です

こんな感じのSQLがあったとします。

Select Count(yyyy) From hoge Where yyyy = '2014'
※hogeテーブルのyyyyが'2014'の件数を数えています

これをプログラム(Javaぽく)で書くと

string stryyyy = "2014"
String sql = "Select Count(yyyy) From hoge Where yyyy = '" + stryyyy + "'";

こんな感じになりますね
仮にyyyyの引数が無いとこんな感じになります

String sql = "Select Count(yyyy) From hoge;

このWhere句のありなしがメンドクサイ
更に、下記の様に次の条件値が出てくると、And付けたりと
もうイヤになりますw

Select Count(yyyy) From hoge Where yyyy = '2014' and mm = '04'

これを解決する方法がこちらの書き方
Select Count(yyyy) From hoge Where 0=0 and yyyy = '2014' And mm = '04'

Whereの次に0=0を付けてしまいます

0=0は常に真となり、全件という意味です。
0=0を付けたからと言ってレスポンスには一切影響が出ません

これを踏まえてSQLを作るプログラム部分を書くとこうなります。

String sql = "Select Count(yyyy) From hoge Where 0=0";

if yyyy != null && yyyy.length() > 0 {
    sql = sql + " And yyyy='" + yyyy + "'";
}

if mm != null && mm.length() > 0 {
    sql = sql + " And mm ='" + mm + "'";
}

最初から、0=0と条件が付いているのでWhereを書いたり、Andを気にしたりする必要がありません

知ってる人は知っている
知らない人はしらない

そんな裏ワザチックな小ネタでした