SQL Server メモ
SQL Server Express に日経平均株価のヒストリカルデータテーブルをCREATEして、データをINSERTしたときのメモ。
VBAHaskellとvb_ODBC.clsを使用。
1.データの準備
日経平均株価 日足 時系列データ CSVダウンロードから各年のCSVファイルをダウンロードしておく。
2.ファイルを全部つなげた配列を作る
m = catVs(getTextFile("H:\download\indices_I101_1d_2007.csv"), _ getTextFile("H:\download\indices_I101_1d_2008.csv"), _ getTextFile("H:\download\indices_I101_1d_2009.csv"), _ getTextFile("H:\download\indices_I101_1d_2010.csv"), _ getTextFile("H:\download\indices_I101_1d_2011.csv"), _ getTextFile("H:\download\indices_I101_1d_2012.csv"), _ getTextFile("H:\download\indices_I101_1d_2013.csv"), _ getTextFile("H:\download\indices_I101_1d_2014.csv"), _ getTextFile("H:\download\indices_I101_1d_2015.csv"), _ getTextFile("H:\download\indices_I101_1d_2016.csv"))
中身はこんな感じ。
各ファイルにヘッダがついていて、末尾には空白行がある。
printM_ m, 4 日付,始値,高値,安値,終値 2007-12-28,15413.37,15413.37,15240.96,15307.78 2007-12-27,15616.41,15628.31,15535.51,15564.69 2007-12-26,15613.96,15653.54,15559.47,15653.54 printM_ m, -4 2016-01-06,18410.57,18469.38,18064.30,18191.32 2016-01-05,18398.76,18547.38,18327.52,18374.00 2016-01-04,18818.58,18951.12,18394.43,18450.98
3.日付でソートする
各行の先頭10文字を抽出して <
で比較する。
si = sortIndex_pred(m, p_less(p_left(,10), p_left(,10))) permutate m, si
ソート後の状態を見てみる。
printM_ m, 11 2007-01-04,17322.50,17379.46,17315.75,17353.66 printM_ m,-11 2016-12-22,19396.85,19427.67,19327.51,19427.67 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値 日付,始値,高値,安値,終値
空白行が先頭に、ヘッダ行が末尾に集まっている。
4.データの整形
空白行(先頭10行)とヘッダ行(末尾10行)を削除し、各項目をカンマで区切る。
m = tailN(headN(m, -10), -10) m = mapF(p_Split(, ","), m) printS m [Dim1]: 0 -> 2443 : Total Size = 2444 printM_ m,4 2007-01-04 17322.50 17379.46 17315.75 17353.66 2007-01-05 17315.53 17327.13 17011.09 17091.58 2007-01-09 17018.89 17261.02 16983.97 17237.76 2007-01-10 17192.41 17199.41 16847.57 16942.40
5.ODBCオブジェクトを作ってSQL Serverに接続
set oo = new vb_ODBC ?oo.connect(oo.sqlServer_expr("***-PC\SQLEXPRESS", "sampleDB01")) True
6.テーブルCREATE
oo.exec "CREATE TABLE NK225 (" & _ "MDATE date," & _ " OPEN_P numeric(8,2)," & _ " HIGH_P numeric(8,2)," & _ " LOW_P numeric(8,2)," & _ " CLOSE_P numeric(8,2)" & _ ");"
7.INSERT文を作る
s = oo.insert_expr_("NK225", Array("MDATE","OPEN_P","HIGH_P","LOW_P","CLOSE_P"), m) printS s [Dim1]: 0 -> 2443 : Total Size = 2444 printM_ S,3 INSERT INTO NK225 (MDATE,OPEN_P,HIGH_P,LOW_P,CLOSE_P) VALUES('2007-01-04',17322.50,17379.46,17315.75,17353.66); INSERT INTO NK225 (MDATE,OPEN_P,HIGH_P,LOW_P,CLOSE_P) VALUES('2007-01-05',17315.53,17327.13,17011.09,17091.58); INSERT INTO NK225 (MDATE,OPEN_P,HIGH_P,LOW_P,CLOSE_P) VALUES('2007-01-09',17018.89,17261.02,16983.97,17237.76);
8.INSERT文を実行
oo.exec s
9.結果を確認
m1 = oo.select_flat("select * from NK225 order by MDATE").get_data printS m1 [Dim1]: 0 -> 2443 [Dim2]: 0 -> 4 : Total Size = 12220 printM m1,5 2007/01/04 17322.5 17379.46 17315.75 17353.66 2007/01/05 17315.53 17327.13 17011.09 17091.58 2007/01/09 17018.89 17261.02 16983.97 17237.76 2007/01/10 17192.41 17199.41 16847.57 16942.4 2007/01/11 16958.57 17057.44 16758.46 16838.16 printM m1,-5 2016/12/16 19438.39 19439.97 19360.36 19401.15 2016/12/19 19345.84 19399.26 19307.14 19391.6 2016/12/20 19367.84 19511.2 19356.81 19494.53 2016/12/21 19547.28 19592.9 19375.19 19444.49 2016/12/22 19396.85 19427.67 19327.51 19427.67 h = oo.get_header printM h MDATE TYPE_DATE OPEN_P NUMERIC HIGH_P NUMERIC LOW_P NUMERIC CLOSE_P NUMERIC