当前位置: 代码迷 >> Sql Server >> SQL Server直接读取同花顺股票数据,该怎么处理
  详细解决方案

SQL Server直接读取同花顺股票数据,该怎么处理

热度:94   发布时间:2016-04-25 00:16:16.0
SQL Server直接读取同花顺股票数据
CSDN的朋友,从明天本人开始要为生计奔波,没时间上CSDN了,混迹CSDN一个月,有什么得罪的地方,请多多包涵。

消失之前,总想写点什么,纯技术帖是写不出来,太久没玩数据库,前几天看到有朋友问道股票数据的问题,那就写一个直接用OPENROWSET读取同花顺股票数据的方法吧,适合盘后分析。

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

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


--===============================================================
-- 文件头16个字节剖析(日线)
-- 0x6864312E3000 6  固定
-- 0x????????     4  记录数
-- 0x4800         2  记录开始位置: 64是错的, 文件头 + 列定义 = 72
-- 0x3800         2  每记录的长度: 56
-- 0x0E00         2  每记录的列数: 14
-----------------------------
-- 列定义: 04表示列长度
-- 0x01300004     4 日期
-- 0x07700004     4 开盘价
-- 0x08700004     4 最高价
-- 0x09700004     4 最低价
-- 0x0B700004     4 收盘价
-- 0x13700004     4 成交金额(元)
-- 0x0D700004     4 成交量(股)
-- 0x0E700004     4 FFFFFFFF
-- 0x0F700004     4 FFFFFFFF
-- 0x11700004     4 FFFFFFFF
-- 0x12700004     4 FFFFFFFF
-- 0x50700004     4 FFFFFFFF
-- 0xE7700004     4 FFFFFFFF
-- 0xE8700004     4 FFFFFFFF
--===============================================================
if object_id('tempdb.dbo.#') is not null drop table #
go
declare @ varbinary(max), @max int, @e float
select @ = BulkColumn, @e = 10 from OPENROWSET(BULK N'X:\...\history\shase\day\600787.day', SINGLE_BLOB) as bin
select @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))/16
  相关解决方案