今日の罠(常識かも)
①mysqlのクエリーでは「○○ <> True」使わない方がいいです。NULLのものが入ってこないから。
「○○ = False or ○○ IS NULL」が正解
②「union」では勝手に一意してくれるから、そうさせたくないときは「union all」
2012年9月27日木曜日
2012年9月26日水曜日
selectした内容をシーケンス(Sequence)付きで新しいテーブルに挿入
ラベル:
mysql
insert into new_table (
seq
,fund_name
,rank_org
,yyyymm
,period)
SELECT
@row := @row + 1 as seq
,fund_name
,rank as rank_org
,yyyymm
,period
FROM old_table t,
(SELECT @row := 0) r
where yyyymm = '201203'
and period = '1m'
order by rank desc limit 10;
count caseで月次統計クエリー、タイトル付きでCSV出力
ラベル:
mysql
SELECT 'Product_ID', 'Product_Name', 'Total', 'Jan', 'Feb',... //csvのタイトルを出力
UNION
SELECT product_id,
product_name,
Count(*), //合計
Count(CASE
WHEN RIGHT(yyyymm, 2) = '01' THEN 1
END) AS 'Jan', //1月の合計
Count(CASE
WHEN RIGHT(yyyymm, 2) = '02' THEN 1
END) AS 'Feb', //2月の合計
...
...
FROM sales_table
GROUP BY product_id
into outfile 'c:\\prod_monthly.csv' FIELDS TERMINATED BY ',';//csvに出力
2012年9月21日金曜日
住所をマッピングする為に、mysqlのLEFTとINSTRで関数で住所の検索キーを生成
まずは町、区、市、郡まで切り捨て
そして、もっと大雑把、都道府県
DBのエンコードはUTF8だけど、データ自体のエンコードはsjisになっている。
windowsのコマンドプロンプトからmysqlのコンソールにアクセスしているので、
上記クエリーを投げでもなぜかうまくいかない...
ここですごい人に見てもらって、どうもコマンドプロンプトのエンコードのせいかも
コマンドプロンプトのエンコードを変えるコマンドchcp(change code page)
とにかく、DOSのコマンドプロンプトで2バイドのものは書かないで
phpmyadminやnavicatなどSQLクライアントを使いましょう。
ALTER TABLE company_nikkei ADD shi_addr_key VARCHAR( 255 ) NULL;
UPDATE company_nikkei SET shi_addr_key =
LEFT(address,CASE
WHEN INSTR(address,'町') <> 0 THEN INSTR(address,'町')
WHEN INSTR(address,'区') <> 0 THEN INSTR(address,'区')
WHEN INSTR(address,'市') <> 0 THEN INSTR(address,'市')
WHEN INSTR(address,'郡') <> 0 THEN INSTR(address,'郡')
END);
そして、もっと大雑把、都道府県
ALTER TABLE company_nikkei ADD to_addr_key VARCHAR( 255 ) NULL;
UPDATE company_nikkei SET to_addr_key = CASE WHEN INSTR(address,'東京都') <> 0 THEN '東京都'
WHEN INSTR(address,'北海道') <> 0 THEN '北海道'
WHEN INSTR(address,'大阪府') <> 0 THEN '大阪府'
WHEN INSTR(address,'京都府') <> 0 THEN '京都府'
WHEN INSTR(address,'県') <> 0 THEN LEFT(address,INSTR(address,'県'))
WHEN INSTR(address,'市') <> 0 THEN LEFT(address,INSTR(address,'市'))
ELSE '不明' END;
DBのエンコードはUTF8だけど、データ自体のエンコードはsjisになっている。
windowsのコマンドプロンプトからmysqlのコンソールにアクセスしているので、
上記クエリーを投げでもなぜかうまくいかない...
ここですごい人に見てもらって、どうもコマンドプロンプトのエンコードのせいかも
コマンドプロンプトのエンコードを変えるコマンドchcp(change code page)
>chcp
現在のコード ページ: 932
> chcp 65001
↑UTF8
とにかく、DOSのコマンドプロンプトで2バイドのものは書かないで
phpmyadminやnavicatなどSQLクライアントを使いましょう。
2012年9月18日火曜日
ついに僕もSSDデビュー
秋葉原からIntelSSD(120G)購入、8000円くらいでした。
セットアップに一苦労…
グラフィックカードが大きい過ぎで、唯一開いているSATAを完全隠した。
幸いファンのあたりだったので、無理やりグラボに穴を貫通してSSDのSATAケーブルを通した。
あとはマンターをつけて、固定しました。
物理繋いたら、あとはCドライブの移行です。
移行作業は割りと簡単、Intelの専用ソフトがあったので、ソース(既存Cドライブ)とターゲット(SSD)を選択して、「次へ」⇒再起動。そしてデータのコピーが終わったらシャットダウンして、SATAケーブルの差し替えを行う。
ここで説明書ではSWAPと書いてますが、実はここで差し替えたらドライブレターが乱れることがありますので、元CドライブのSATAケーブルをSSDに接続したら、一旦元CドライブHDDをOFFLINEにしたほうがいいです。
そしてWindowsを起動して、ちゃんとSSDがCドライブになっているを確認したら、再度PCをシャットダウンして、元CドライブのHDDもONLINEさせて、起動すると、ドライブレターがちゃんと変わります。
まぁメモメモ
PS:肝心なBOOTスピードは…まぁ驚く程のスピード感は感じ取れなかったが、実際いろいろ使ってみたら、確かに以前より3,4割早くなっている体感。まぁまぁ8000円だから、良かったと思う!
セットアップに一苦労…
グラフィックカードが大きい過ぎで、唯一開いているSATAを完全隠した。
幸いファンのあたりだったので、無理やりグラボに穴を貫通してSSDのSATAケーブルを通した。
あとはマンターをつけて、固定しました。
物理繋いたら、あとはCドライブの移行です。
移行作業は割りと簡単、Intelの専用ソフトがあったので、ソース(既存Cドライブ)とターゲット(SSD)を選択して、「次へ」⇒再起動。そしてデータのコピーが終わったらシャットダウンして、SATAケーブルの差し替えを行う。
ここで説明書ではSWAPと書いてますが、実はここで差し替えたらドライブレターが乱れることがありますので、元CドライブのSATAケーブルをSSDに接続したら、一旦元CドライブHDDをOFFLINEにしたほうがいいです。
そしてWindowsを起動して、ちゃんとSSDがCドライブになっているを確認したら、再度PCをシャットダウンして、元CドライブのHDDもONLINEさせて、起動すると、ドライブレターがちゃんと変わります。
まぁメモメモ
PS:肝心なBOOTスピードは…まぁ驚く程のスピード感は感じ取れなかったが、実際いろいろ使ってみたら、確かに以前より3,4割早くなっている体感。まぁまぁ8000円だから、良かったと思う!
2012年9月16日日曜日
vb,vbaの(仮)非同期実行方法??
ラベル:
vba
for i = 0 to 9999 DoEvents nextDoEventsはcupビジー時でもユーザのインプットに対してUIを反応させることができるらしい
ここでは詳しく書いています、ありがとうございました。
2012年9月6日木曜日
mysqlのload data infile
一般的にCSVファイルをmysqlコンソルで直接流し込む...
LINES TERMINATED追加しないとおかしいことになる。
csvの中身はこんな感じ:
10000031,"ああああ",""
10000041,"いいいい",""
10000050,"うううう","おおおお"
10000130,"ささささ","しししし"
文字コードはsjisで、改行コードはCRLF
流しこむコマンド:
mysql> set character_set_database=sjis;
mysql> LOAD DATA INFILE "C:\\Documents and Settings\\username\\data.csv" INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' STARTING BY '';
LINES TERMINATED追加しないとおかしいことになる。
2012年9月5日水曜日
vba条件書式の罠
現象:vbaで条件書式を追加したら、訳がわからない条件が追加される、Excel2007
下のコードで「C1」セルに、自分自身がエラーの場合、背景色を変える条件書式を追加したところ
試しに絶対参照の「ISERROR($C$1)」にしてみたら、治った(当たり前だ)。でも絶対参照だとソートとかしたら大変なことになるので...
まぁ、最後はこうして治ったけど、なんか腑に落ちないな~
下のコードで「C1」セルに、自分自身がエラーの場合、背景色を変える条件書式を追加したところ
Sub test() Sheet1.Range("C1").FormatConditions.Delete Sheet1.Range("C1").FormatConditions.Add Type:=xlExpression, Formula1:="=ISERROR(C1)" Sheet1.Range("C1").FormatConditions(1).Interior.ColorIndex = 38 End Sub実行後、出来た数式を見てみると、なんだこりゃ~?!「ISERROR(C1)」と指定したのに、「XFD1」とはなんだ?!!
試しに絶対参照の「ISERROR($C$1)」にしてみたら、治った(当たり前だ)。でも絶対参照だとソートとかしたら大変なことになるので...
まぁ、最後はこうして治ったけど、なんか腑に落ちないな~
Sub test() Sheet1.Activate Sheet1.Range("C1").Select Sheet1.Range("C1").FormatConditions.Delete Sheet1.Range("C1").FormatConditions.Add Type:=xlExpression, Formula1:="=ISERROR(C1)" Sheet1.Range("C1").FormatConditions(1).Interior.ColorIndex = 38 End Sub
2012年9月2日日曜日
google spreadsheetsで乱数キーを生成する関数
下記のコードをスクリプトエディタで追加して
function randString(cb) { var rgch = "abcdefghijklmnopqrstuvwxyz"; rgch = rgch.toUpperCase() + "0123456789"; var tmpString = ""; for (var i = 1; i <= cb; i++) { var startPos = Math.ceil((Math.random() * rgch.length)); tmpString = tmpString + rgch.substring(startPos, startPos + 1); } return tmpString; } function genKey(cn) { var keys = []; for (var i = 0; i <= cn - 1; i++) { keys.push(randString(4)); } return keys.join("-"); }スプレッドシートで数式を入れると、乱数生成のキーが生成される。
登録:
投稿 (Atom)