2015-10-14 21 views
0

我使用SQL分析器將在SSAS多維數據集上觸發的MDX語句捕獲到表中。我想要做的是從MDX語句中提取多維數據集名稱。從SQL服務器中的文本中提取子串

我遇到的問題是,MDX語句非常龐大且隨機(用戶連接到多維數據集並創建即席報告)並且構建了多個子多維數據集,因此很難獲取多維數據集名稱。

我能弄清楚搜索模式。

First string: 'FROM [' 
Second string: ']' 

我現在需要從變量中取出一個子串。下面 實施例:

DECLARE @TEXT varchar(max) = 'SELECT NON EMPTY (((( [[ XXXXX ]] }) ON ROWS FROM (SELECT ({XXXXXXXX }) ON COLUMNS FROM [Sales Reporting])) 
WHERE XXXXX))' 

DECLARE @FirstPosition int = (SELECT CHARINDEX('FROM [',@TEXT)+5) 
DECLARE @SecondPosition int = (SELECT CHARINDEX(']',@TEXT,@FirstPosition)) 

SELECT @FirstPosition, @SecondPosition 

SELECT SUBSTRING(@TEXT,CHARINDEX('FROM [',@TEXT)+5,(CHARINDEX(']',@TEXT,@FirstPosition)-CHARINDEX('[',@TEXT))-1) 

希望的結果=銷售報告

回答

0

得到的溶液被證明是簡單比我預期的。

DECLARE @TEXT varchar(max) = 'SELECT NON EMPTY (((( [[ XXXXX ]] }) ON ROWS FROM (SELECT ({XXXXXXXX }) ON COLUMNS FROM [Sales Reporting])) 
WHERE XXXXX))' 

DECLARE @FirstPosition int = (SELECT CHARINDEX('FROM [',@TEXT)+5) 
DECLARE @ExtractString nvarchar(max) = (SELECT SUBSTRING(@TEXT,@FirstPosition, LEN(@Text))) 
DECLARE @SecondPosition int = (SELECT CHARINDEX(']',@ExtractString)) 

SELECT SUBSTRING(@ExtractString,CHARINDEX('[',@ExtractString)+1,(CHARINDEX(']',@ExtractString)-CHARINDEX('[',@ExtractString))-1) AS CubeName