从SQL服务器中的文本中提取子字符串

时间:2015-10-14 06:06:16

标签: sql-server tsql sql-server-2012 substring

我使用SQL事件探查器捕获在SSAS多维数据集上触发的MDX语句到表中。我想要做的是从MDX语句中提取多维数据集名称。

我遇到的问题是MDX语句非常庞大且随机(用户连接到多维数据集并创建Adhoc报告)并且构建了多个子多维数据集,因此难以获取多维数据集名称。

我能够找出搜索模式。

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)

期望结果=销售报告

1 个答案:

答案 0 :(得分: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