2011-10-17 106 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