matlab提取wind底层数据库操作
首先需要安装navicat for SQL server 软件,
为了实现Matlab 通过JDBC方式连接Sqlserver数据库, 需要安装Sqlserver JDBC驱动. 地址:
https://blog.csdn.net/yinxing408033943/article/details/7677769
在navicat for SQL server进行试验, 登陆输入用户名,
新建查询,一个简单的查询例子
送上Navicat sql 的一些快捷键:
ctrl + /: 注释
ctrl + shift + /: 取消注释
ctrl + l: 删除一行
在matlab中实现如下: 新建一个函数getConn()
%连接数据库获取数据
function conn=getConn()
% 数据库url
databaseurl='jdbc:sqlserver://10.2.224.56:1433;database=newwind'; %根据需要自行修改
% jdbc驱动
driver='com.microsoft.sqlserver.jdbc.SQLServerDriver'; %driver
% 登录名
username='***';
% 密码
password='****';
% 数据源名称
databasename='newwind';
% 得到与数据库的连接
conn = database(databasename,username,password,driver,databaseurl);
% % 如果未连接成功,抛出错误并显示原因
% if ~isconnection(conn)
% error('与数据库''%s''连接失败:%s', databasename, conn.Message);
% end
接着, 新建一个脚本get_data
tt1='''20160930'',''20161231'''; code_sql='''000001.SZ'',''002808.SZ'''; conn=getConn(); sql=['select s.report_period ,s.s_info_windcode,a.s_fa_eps_basic,a.TOT_OPER_REV ',... ' from (select DISTINCT t.report_period,t.s_info_windcode from ASHAREINCOME t',... [' where t.report_period IN(',tt1],... [')and t.s_info_windcode IN (',code_sql],... ')) s full join (SELECT report_period,s_info_windcode,s_fa_eps_basic ,TOT_OPER_REV',... [' from ASHAREINCOME where report_period IN(',tt1],... [') and statement_type=''408001000''and s_info_windcode IN (',code_sql],... ')) a on s.report_period=a.report_period and s.s_info_windcode=a.s_info_windcode',... ' order by s.s_info_windcode, s.report_period']; curs = exec(conn,sql); curs = fetch(curs); data_try= curs.Data; size(data_try)
得到结果
!!!注意:wind账号一般由公司提供, 且只能在公司内部网才可以用.