2015-09-12 101 views
1

我想獲得一個SQL查詢來獲取圖像數據類型列中的多個值。數據庫看起來如下圖所示:如何從圖像數據類型列中獲取多個值?

DB結構

Column  | DataType 
PN   | varchar(50) 
Data  | image 

DB實施例

PN   | Data 
A   | Data1 
B   | Data2 

每個「數據」 DB列的數據源是.txt文件看起來像這樣:

<FILE FROM DATA1> 
HEADER1  : header1 
HEADER2  : header2 
HEADER3  : header3 
HEADER4  : header4 

ATTRIBUTE1  : ABC 
ATTRIBUTE2  : %%% 
ATTRIBUTE3  : %%% 
ATTRIBUTE4  : %%% 
ATTRIBUTE5  : %%% 

ATTRIBUTE1  : DDD 
ATTRIBUTE2  : %%% 
ATTRIBUTE3  : %%% 
ATTRIBUTE4  : %%% 
ATTRIBUTE5  : %%% 

ATTRIBUTE1  : FFF 
ATTRIBUTE2  : %%% 
ATTRIBUTE3  : %%% 
ATTRIBUTE4  : %%% 
ATTRIBUTE5  : %%% 

<FILE FROM DATA2> 
HEADER1  : headerA 
HEADER2  : headerb 
HEADER3  : headerc 
HEADER4  : headerd 

ATTRIBUTE1  : dsf 
ATTRIBUTE2  : %%% 
ATTRIBUTE3  : %%% 
ATTRIBUTE4  : %%% 
ATTRIBUTE5  : %%% 

ATTRIBUTE1  : ert 
ATTRIBUTE2  : %%% 
ATTRIBUTE3  : %%% 
ATTRIBUTE4  : %%% 
ATTRIBUTE5  : %%% 

'ATTRIBUTEs1-5' 可被存儲在 每個.txt文件(或在Data [image]行)至少一次和最多約20次。

所需的輸出看起來:

@imageToVarchar = CONVERT(varchar(MAX), CONVERT(varbinary(MAX), Data)); 

我數ATT1的數目:

PN | Attributes  --Comments 
A | ABC    --Att1 coming out from Data1 
A | DDD    --Att1 coming out from Data1 
A | FFF    --Att1 coming out from Data1 
B | dsf    --Att1 coming out from Data2 
B | ert    --Att1 coming out from Data2 

我通過使用下面的語句轉換圖像數據類型到varchar通過以下表達式在文件中找到:

@amountOfPNsAtFile = (datalength(@imageToVarchar) - datalength(replace(cast(@imageToVarchar as varchar(max)), 'ATTRIBUTE1 :', '')))/LEN('ATTRIBUTE1 :'); 

我很努力讓所有'ATTRIBUTE1存儲在一個文件中。我可以通過以下語句獲得第一個'ATTRIBUTE1':

@att1 = SUBSTRING(@imageToVarchar, CHARINDEX ('ATTRIBUTE1', @imageToVarchar) + LEN('ATTRIBUTE1  :') + 1, CHARINDEX ('ATTRIBUTE2', @imageToVarchar) - CHARINDEX ('ATTRIBUTE1', @imageToVarchar)- LEN('ATTRIBUTE2  :') - 3); 

有關如何獲取其餘Att1的任何想法?

在此先感謝!

回答

0

您應該使用SQL數據庫作爲標準化的數據存儲。

編寫自定義分析器(例如使用ANTLR),然後將結果存儲到表中。

相關問題