以下代码
declare @text VARCHAR(MAX)
set @text='[Dim Company].[Company].[23]'
SELECT SUBSTRING(@Text, CHARINDEX('[Dim Company].[Company].[', @Text)
, CHARINDEX(']',@text) - CHARINDEX('[Dim Company].[Company].[', @Text) + Len(']'))
返回[Dim Company]
。我希望它能在最后[]
之间返回整数 - 在本例中为23
。我怎样才能获得所需的字段?
答案 0 :(得分:0)
如果您知道它始终持续,为什么不{@ 1}}字符串,找到第一个括号对之间的值,然后REVERSE
结果?
比嵌套REVERSE
电话容易得多。
答案 1 :(得分:0)
这将为您提供23]
SELECT RIGHT(@text, CHARINDEX('[',REVERSE(@text))-1)
这将为您提供23
SET @tmp = RIGHT(@text, CHARINDEX('[',REVERSE(@text))-1)
SET @tmp = LEFT(@tmp, LEN(tmp)-1)
答案 2 :(得分:-1)
我同意mwigdahl,这是做事的坏方法,但这就是你寻求的答案:
declare @text VARCHAR(MAX)
set @text='[Dim Company].[Company].[23]'
SELECT SUBSTRING(@Text,
LEN('[Dim Company].[Company].[')+1,
LEN(@text)-LEN('[Dim Company].[Company].[')-1)
更好的方法是使用PARSENAME()
函数。该函数的目的实际上是解析对象名称,例如server.schema.table
,但由于您的字符串看起来就像那样,我们可以劫持该函数。它比charindex
/ substring
更有效,更清洁。
declare @text varchar(max), @p1 varchar(max), @p2 varchar(max), @p3 varchar(max)
set @text='[Dim Company].[Company].[23]'
set @p1 = PARSENAME(@text, 3)
set @p2 = PARSENAME(@text, 2)
set @p3 = PARSENAME(@text, 1)
select @p1, @p2, @p3