2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > SQL Server直接读取同花顺股票数据

SQL Server直接读取同花顺股票数据

时间:2021-03-10 17:56:11

相关推荐

SQL Server直接读取同花顺股票数据

一个直接用OPENROWSET读取同花顺股票数据的方法吧,适合盘后分析。

方法不算好方法,但比较简单,以前我做数据分析的时候,都是用这个方法,平时数据库不存数据,需要分析的时候动态调入,调入速度很快,有更好方法的朋友请多多指教。

下面是日线数据(600787只是例子不构成任何投资建议):

--===============================================================-- 文件头16个字节剖析(日线)-- 0x6864312E3000 6 固定-- 0x????????4 记录数-- 0x4800 2 记录开始位置: 64是错的, 文件头 + 列定义 = 72-- 0x3800 2 每记录的长度: 56-- 0x0E00 2 每记录的列数: 14------------------------------------------------------------------- 列定义: 04表示列长度-- 0x013000044 日期-- 0x077000044 开盘价-- 0x087000044 最高价-- 0x097000044 最低价-- 0x0B7000044 收盘价-- 0x137000044 成交金额(元)-- 0x0D7000044 成交量(股)-- 0x0E7000044 FFFFFFFF-- 0x0F7000044 FFFFFFFF-- 0x117000044 FFFFFFFF-- 0x127000044 FFFFFFFF-- 0x507000044 FFFFFFFF-- 0xE77000044 FFFFFFFF-- 0xE87000044 FFFFFFFF--===============================================================if object_id('tempdb.dbo.#') is not null drop table #godeclare @ varbinary(max), @max int, @e floatselect @ = BulkColumn, @e = 10 from OPENROWSET(BULK N'X:\...\history\shase\day\600787.day', SINGLE_BLOB) as binselect @max = substring(@,10,1)+substring(@,9,1)+substring(@,8,1)+substring(@,7,1)select top (@max) n = identity(int,72,56) into # from syscolumns a, syscolumns b;with cte as(select-- SQL没有提供按字节reverse(binary)的函数或方法,只能substring每个字节倒过来合成:d = convert(int,substring(@, 4+n,1)+substring(@, 3+n,1)+substring(@,2+n,1) +substring(@, 1+n,1)),o = convert(int,substring(@, 8+n,1)+substring(@, 7+n,1)+substring(@, 6+n,1) +substring(@, 5+n,1))&0x0FFFFFFF,p = convert(int,substring(@,12+n,1)+substring(@,11+n,1)+substring(@,10+n,1)+substring(@, 9+n,1))&0x0FFFFFFF,q = convert(int,substring(@,16+n,1)+substring(@,15+n,1)+substring(@,14+n,1)+substring(@,13+n,1))&0x0FFFFFFF,r = convert(int,substring(@,20+n,1)+substring(@,19+n,1)+substring(@,18+n,1)+substring(@,17+n,1))&0x0FFFFFFF,s = convert(int,substring(@,24+n,1)+substring(@,23+n,1)+substring(@,22+n,1)+substring(@,21+n,1))&0x0FFFFFFF,t = convert(int,substring(@,28+n,1)+substring(@,27+n,1)+substring(@,26+n,1)+substring(@,25+n,1))&0x0FFFFFFF,u = convert(int,substring(@, 8+n,1))/16,v = convert(int,substring(@,12+n,1))/16,w = convert(int,substring(@,16+n,1))/16,x = convert(int,substring(@,20+n,1))/16,y = convert(int,substring(@,24+n,1))/16,z = convert(int,substring(@,28+n,1))/16from #)selectid = row_number()over(order by d desc),日期 = d,开盘 = o*power(@e,(u&7)*power(-1,sign(u&8))),最高 = p*power(@e,(v&7)*power(-1,sign(v&8))),最低 = q*power(@e,(w&7)*power(-1,sign(w&8))),收盘 = r*power(@e,(x&7)*power(-1,sign(x&8))),金额 = s*power(@e,(y&7)*power(-1,sign(y&8))),成交 = t*power(@e,(z&7)*power(-1,sign(z&8)))from cte/*id 日期 开盘最高最低收盘金额 成交-------- ----------- -------- -------- -------- -------- ------------ ------------1 0820 8.358.398.098.25107211287 130548262 0819 8.618.618.388.4586104465101478073 0818 8.388.658.328.61115737744 13614804. . . . . . . .. . . . . . . .. . . . . . . .321419970122 10.75 10.810.23 10.46 291050002810400321519970121 10.811.42 10.810.93 944260008567400*/

下面是分钟线数据,具体内容就不写了,只是调整一下数字表#标识列的初始大小和增量问题:

--===============================================================

-- 文件头16个字节剖析(5/1分钟线)

-- 0x6864312E3000 6 固定

-- 0x???????? 4 记录数

-- 0x3800 2 记录开始位置: 56是对的, 文件头 + 列定义 = 56

-- 0x2800 2 每记录的长度: 40

-- 0x0A00 2 每记录的列数: 10

-----------------------------------------------------------------

-- 列定义: 04表示列长度

-- 0x01300004 4 日期: 已加密, 不要问怎么解密, 我不知道.

-- 0x07700004 4 开盘价

-- 0x08700004 4 最高价

-- 0x09700004 4 最低价

-- 0x0B700004 4 收盘价

-- 0x13700004 4 成交金额(元)

-- 0x0D700004 4 成交量(股)

-- 0x0E700004 4 FFFFFFFF

-- 0x0F700004 4 FFFFFFFF

-- 0x12700004 4 FFFFFFFF

--===============================================================

用SQL来分析二进制文件格式还是比较方便的,可以直接select/convert,快捷直观。我一般用来分析game的存档文件,呵呵。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。