MySQLで、クエリAという条件で得られた結果と、クエリBという条件で得られた結果を、UNION ALLして、さらにsumする必要があり、その書き方のメモ。
再現実験用に、テーブルを使わないクエリとして記載。
union allでつないで、それを括弧でくるんで、それを「as hogehoge」で名前を付けてやる、という流れ。
mysql> select sum(a) from (select 1 as a union all select 2 as a) as uni;
+--------+
| sum(a) |
+--------+
| 3 |
+--------+
1 row in set (0.00 sec)
こちらを参考にさせていただきました。
http://ameblo.jp/udzura/entry-10122301087.html
2011年08月04日
Perlで「半角文字が入ってない」チェックをする
全角文字しか受け付けません、というシステムにデータを渡す必要があり、半角文字が含まれないことを確認するためにこんなPerlコードを書いてみた。
contains_hankakuは、半角プリンタブル文字が含まれるかどうかをチェックするコード。全角しか受け付けない、のチェックには不十分なのだけど、手入力ミスを弾くならこんな感じか。
zenkaku_onlyは、より厳密に全角限定を確認するコード。EUCにして「0xA1 - 0xFE」しか出てこないことを確認するようにしている。
------------------------
#!/usr/bin/perl
use Jcode;
my $invalid = "(あ)";
my $valid = "(あ)";
if ( &contains_hankaku($invalid) ) {print "invalidには半角がある\n";}
if ( &contains_hankaku($valid) ) {print "validには半角がある\n";}
if ( &only_zenkaku($invalid) ) {print "invalidは全角オンリーだ\n";}
if ( &only_zenkaku($valid) ) {print "validは全角オンリーだ\n";}
exit(0);
## EUCに変換してからチェック。半角プリンタブルコードはEUC全角には出てこない
sub contains_hankaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x20-\x7e]/) == undef) {return 0;}
else {return 1;}
}
## EUC全角の、0xA1 - 0xFEの間しか出てこないことを確認
sub only_zenkaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x0-\xA0]/) == undef && ($euc =~ /\xFF/) == undef) {return 1;}
else {return 0;}
}
contains_hankakuは、半角プリンタブル文字が含まれるかどうかをチェックするコード。全角しか受け付けない、のチェックには不十分なのだけど、手入力ミスを弾くならこんな感じか。
zenkaku_onlyは、より厳密に全角限定を確認するコード。EUCにして「0xA1 - 0xFE」しか出てこないことを確認するようにしている。
------------------------
#!/usr/bin/perl
use Jcode;
my $invalid = "(あ)";
my $valid = "(あ)";
if ( &contains_hankaku($invalid) ) {print "invalidには半角がある\n";}
if ( &contains_hankaku($valid) ) {print "validには半角がある\n";}
if ( &only_zenkaku($invalid) ) {print "invalidは全角オンリーだ\n";}
if ( &only_zenkaku($valid) ) {print "validは全角オンリーだ\n";}
exit(0);
## EUCに変換してからチェック。半角プリンタブルコードはEUC全角には出てこない
sub contains_hankaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x20-\x7e]/) == undef) {return 0;}
else {return 1;}
}
## EUC全角の、0xA1 - 0xFEの間しか出てこないことを確認
sub only_zenkaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x0-\xA0]/) == undef && ($euc =~ /\xFF/) == undef) {return 1;}
else {return 0;}
}