从 SQL 服务器中的文本中提取子字符串
Extract Substring from text in SQL sever
我使用 SQL 探查器将 SSAS 多维数据集上触发的 MDX 语句捕获到 table 中。我想做的是从 MDX 语句中提取 Cube 名称。
我遇到的问题是 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)
期望的结果 = 销售报告
得到的解决方案比我预期的要简单。
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
我使用 SQL 探查器将 SSAS 多维数据集上触发的 MDX 语句捕获到 table 中。我想做的是从 MDX 语句中提取 Cube 名称。
我遇到的问题是 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)
期望的结果 = 销售报告
得到的解决方案比我预期的要简单。
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