2014年8月9日土曜日

Rubyでランダムな日付を作成


テストなどで,ランダムな日付を作る必要がある時もあると思います.
最初は
  • ランダムな年,ランダムな月…をrand関数で作る
  • それらを文字列化,適当に連結
  • Date.parseでDateオブジェクトに返還
で良いかなぁとも思ったのですが(例えば Rubyで「ランダムに日付取得」 ),.

例えば司馬遼太郎さんが生きている間(1923年8月7日 - 1996年2月12日)のランダムな日を選ぶ時には
require "date"
s1 = Date.parse("1923/08/07")
s2 = Date.parse("1996/02/12")
s = Random.rand(s1 .. s2)

得られたsはDateオブジェクトで,司馬遼太郎さんの過ごした人生の一日が入っているはずです.


割とどうでもいいですが,遠藤周作(1923年3月27日 - 1996年9月29日)と司馬遼太郎は生年・没年ともに同じなんですね.

都道府県名の一覧(カタカナ)

タイトルオンリー
漢字ひらがなもどうぞ

ホッカイドウ
アオモリ
アキタ
ミヤギ
ヤマガタ
フクシマ
イバラキ
トチギ
チバ
グンマ
サイタマ
トウキョウ
カナガワ
ヤマナシ
ニイガタ
ナガノ
トヤマ
イシカワ
ギフ
シズオカ
アイチ
フクイ
ギフ
シガ
キョウト
オオサカ
ナラ
ミエ
ワカヤマ
ヒョウゴ
トットリ
シマネ
オカヤマ
ヒロシマ
ヤマグチ
エヒメ
トクシマ
カガワ
コウチ
フクオカ
サガ
ナガサキ
オオイタ
クマモト
ミヤザキ
カゴシマ
オキナワ

都道府県名の一覧(ひらがな)

タイトルオンリー
カタカナ漢字もどうぞ

ほっかいどう
あおもり
あきた
みやぎ
やまがた
ふくしま
いばらき
とちぎ
ちば
ぐんま
さいたま
とうきょう
かながわ
やまなし
にいがた
ながの
とやま
いしかわ
ぎふ
しずおか
あいち
ふくい
ぎふ
しが
きょうと
おおさか
なら
みえ
わかやま
ひょうご
とっとり
しまね
おかやま
ひろしま
やまぐち
えひめ
とくしま
かがわ
こうち
ふくおか
さが
ながさき
おおいた
くまもと
みやざき
かごしま
おきなわ

都道府県名の一覧(漢字)

プログラムで必要だったのですが,意外と見つからなかったので.
カタカナひらがなもどうぞ

北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
新潟県
富山県
石川県
福井県
山梨県
長野県
岐阜県
静岡県
愛知県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
徳島県
香川県
愛媛県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県

2014年7月15日火曜日

Rubyのuptoに隠れたる罠


Rubyである範囲内で繰り返し処理をする時,uptoメソッドを使うと思います.
3.upto(12){ |i| puts i }  #例1

みたいに.
このuptoメソッドはIntegerクラスのメソッドですが,実はStringクラスにも同名のメソッドがあります.
このメソッドでは,文字列を順番に繰り返します.例えば,アルファベットの順番がわからなくなったら
"a".upto("z"){ |i| puts i } #例2
とすると,aからzまでの文字が表示されます.
数値の文字列にも対応しており,
 "3".upto("12"){ |i| puts i } #例3
で3から12までの数値の文字列が表示されます.
訓練されていないと,例1と例3の違いには気づかないかもしれませんが.

他所から引っ張ってきた「Stringクラスで表現された数値」を「Integerの数値」のつもりで,「なんでuptoが動いているのに,数値扱いされないんだ!」とハマる阿呆は僕だけで良いでしょう.

2014年7月10日木曜日

Ruby mysql2でLoad infile



MySQLにローカルファイルからデータを登録するにはLOAD DATA INFILEを使えば良いのですが,
RubyのMysql2ライブラリで使う際のメモ書き少々.

やる事は簡単でドキュメントの"Connection options"の項にチラッとある"local_infile"オプションを有効にすると良いです.例えば,
 con = Mysql2::Client.new(:host =>"host", :username => "hoge", :password =>"pw", :database => "db", :local_infile => true)
 みたいな感じです.

SQLでNULLのデータを数える


SQLでデータ数を数える時はCOUNT関数を使えばよいのですが,あるカラムがNULLのデータを数える時は注意が必要です.
例えば,hogeテーブルからCOLカラムがNULLの個数を数えようと

SELECT COUNT(COL) FROM hoge WHERE COL is NULL;
みたいにしてしまうと,結果は0になってしまいます.
これは,COUNT(COL)がCOLカラムのうちNULLでない個数を数えているためです.
NULLのデータの個数を数えるには,COUNT(*)とするか,COUNT(OTHER_COL)みたに別のカラムを引数にする必要がありますが,前者は遅いらしいので注意する必要があります.