テスト環境を作る際に、テストデータを作るのが面倒・・・なんかライブラリでもないかな・・と思っていたんですが、MySQLでいろいろと簡単にできます。
数字
1 |
SELECT CEIL(RAND() * 100); |
rand()は通常のプログラムと同じで0~1での数字を任意に出力します。当然100のところを好きな数字にしてあげれば1~その数までとなります。
任意の文字
1 |
SELECT SUBSTRING(MD5(RAND()), 1, 10); |
ランダムな半角英数字を作れます。上記の例は1~10まで。パスワードと同じ原理かと思います。concatを使えばさらに任意の文字と組み合わせることができます。
日付
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND; //'1998-01-01 00:00:00' SELECT DATE_ADD(NOW(), INTERVAL 10 DAY) //今現在の時間から10日後 SELECT DATE_ADD('2014-04-30', INTERVAL 1 MONTH) //'2014-05-30'1か月後 ※ランダムな日付を発生させられる SELECT DATE_ADD('2014-08-01', INTERVAL 31 * RAND() DAY ) //2014-08-01からランダムに一か月間を取る SELECT date_format( addtime(concat_ws(' ','2014-01-01' + interval rand()*20 day ,'00:00:00'),sec_to_time(floor(0 + (rand() * 86401)))) ,'%Y-%m-%d %H:%i') //時分の単位までランダムな日付を作りたい場合に使います。 |
date_addは下記リンクを参考に。
DATE_ADD(date,INTERVAL expr unit)
一番最後の構文は説明が必要でしょう。
contact_wsは単純な連結です。
addtimeは任意の日付の加算を行うことができます。加算式がやや複雑です。
w3resource MySQL ADDTIME() function
私が説明するよりこのリンクがはるかにわかりやすい・・英語ですが、式だけでわかると思います。
sec_to_time
1 2 |
SELECT SEC_TO_TIME(80620); //22:23:40 22時間23分40秒のこと。 |
数字をHH:MM:SSで表記します。
MySQL @Wiki 実用リファレンス SEC_TO_TIME
date_formatはその名のとおり通常のフォーマットです。
日付に関しては結構いろいろなことができるのでもっと知っておけばよかったです・・・
参考
ちょうど去年書きましたが、めちゃくちゃ役に立ちました。リンクが(爆)
この記事自体ここのパクリに近いです(爆)。