2011-10-17 73 views
0

我正在研究一个应用程序,用于从Excel电子表格中抓取数据并将其存储到数据库中。数据在excel中没有标准化,因此刮擦需要非常灵活。我最近改的实施,在一定程度上比较通用的我在那里存储ExcelCellLocationSQL正则表达式分裂列

,现在已经打破它分为ExcelColumnExcelRowStartExcelRowEnd

我正在寻找一种方法来获取该表中的所有行,并将ExcelCellLocation拆分为新的实现。

例如:

ExcelCellLocation 
F5 
AB23 

变为

ExcelColumn | ExcelRowStart | ExcelRowEnd 
F   | 5    | 5 
AB   | 23   | 23 

的原因的变化是,我现在刮在工作簿中,需要实施其他电子表格,以改变以更好地满足新的电子表格仍然适用于当前被刮掉的电子表格。新的映射将看起来更像是这样的:

ExcelColumn | ExcelRowStart | ExcelRowEnd 
BC   | 10   | 150 
BC   | 160   | 300 

有没有办法用SQL脚本,将通过每条记录重复,使apropriate变化做到这一点?

在此先感谢!

+0

你已经包括了正则表达式的标签,我可以很容易想象一个正则表达式来改造'F5'和'AB23'成'F'&'5'或分别是'AB'和'23',但我不确定你是否包含了足够的关于数据结构的信息来获得答案 - 主要是因为我不确定你的问题是什么! –

回答

1
-- Sample data 
;with T(ExcelCellLocation) as 
(
    select 'F5' union all 
    select 'AB23' 
) 

-- Query 
select 
     left(ExcelCellLocation, patindex('%[0-9]%', ExcelCellLocation)-1) as ExcelColumn, 
     stuff(ExcelCellLocation, 1, patindex('%[0-9]%', ExcelCellLocation)-1, '') as RowStart 
from T 

结果:

ExcelColumn RowStart 
----------- ----------- 
F   5 
AB   23 
+1

我想这个答案澄清了我的一些问题,涉及我对这个问题本身的评论:D –

+0

@MikaelEriksson感谢这在查询中很好用。我将如何使用此查询将其提交回数据库,而不仅仅是在查询中返回它? – shuniar

+0

@MikaelEriksson Nevermind我能弄明白.. – shuniar