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账号一般由公司提供, 且只能在公司内部网才可以用.

 

posted @ 2018-05-02 15:45  xy小崽子  阅读(1783)  评论(0编辑  收藏  举报