从“[”和“]”之间的字符串中提取字符串
Extracting a string within a string between "[" and "]"
我正在尝试提取字符串的一部分。我想要的字符串总是以“[reportserver”开头。我想提取之后的所有内容,直到下一个“]”。“[reportserver”到“]”之后的文本可能会有所不同。这是整个字符串:
CREATE TRIGGER [dbo].[Schedule_UpdateExpiration]
ON [dbo].[Schedule] AFTER UPDATE
AS
UPDATE EC
SET AbsoluteExpiration = I.NextRunTime
FROM [reportserver - EMPTYTempDB].dbo.ExecutionCache AS EC
INNER JOIN ReportSchedule AS RS ON EC.ReportID = RS.ReportID
INNER JOIN inserted AS I ON RS.ScheduleID = I.ScheduleID AND RS.ReportAction = 3
在这种情况下,我想提取:“reportserver - EMPTYTempDB”
我已经接近这个了:
SELECT SUBSTRING(@TEXT,CHARINDEX('[reportserver',@TEXT)+1,(CHARINDEX(']',@TEXT)))
其中 returns:“reportserver - EMPTYTe”。关闭,但没有雪茄。我错过了什么?
以下逻辑有效:
SELECT
SUBSTRING(val,
CHARINDEX('[reportserver', val) + 1,
CHARINDEX(']', val, CHARINDEX('[reportserver', val)) - CHARINDEX('[reportserver', val) - 1) AS output
FROM yourTable;
您在 SUBSTRING
中的第一个和第二个输入是正确的,但第三个参数需要是要采用的子字符串的长度。这基本上就是[reportserver
中紧跟在[
之后的]
和后者的位置
的区别
赞成另一个答案,因为它是正确的,但只是看待它的方式略有不同——我喜欢使用 CTE 来传递诸如 CHARINDEX
之类的东西,因此代码只需要包含它们一次。
;WITH x AS
(
SELECT t = @text, c = CHARINDEX(N'[reportserver', @text)
),
y AS
(
SELECT r = SUBSTRING(t,c,4000) FROM x
),
z AS
(
SELECT o = LEFT(r, CHARINDEX(N']', r)) FROM y
)
SELECT o FROM z;
这种方法的好处(除了避免多次重复任何表达式)是能够轻松检查任何 CTE 的结果。
我正在尝试提取字符串的一部分。我想要的字符串总是以“[reportserver”开头。我想提取之后的所有内容,直到下一个“]”。“[reportserver”到“]”之后的文本可能会有所不同。这是整个字符串:
CREATE TRIGGER [dbo].[Schedule_UpdateExpiration]
ON [dbo].[Schedule] AFTER UPDATE
AS
UPDATE EC
SET AbsoluteExpiration = I.NextRunTime
FROM [reportserver - EMPTYTempDB].dbo.ExecutionCache AS EC
INNER JOIN ReportSchedule AS RS ON EC.ReportID = RS.ReportID
INNER JOIN inserted AS I ON RS.ScheduleID = I.ScheduleID AND RS.ReportAction = 3
在这种情况下,我想提取:“reportserver - EMPTYTempDB”
我已经接近这个了:
SELECT SUBSTRING(@TEXT,CHARINDEX('[reportserver',@TEXT)+1,(CHARINDEX(']',@TEXT)))
其中 returns:“reportserver - EMPTYTe”。关闭,但没有雪茄。我错过了什么?
以下逻辑有效:
SELECT
SUBSTRING(val,
CHARINDEX('[reportserver', val) + 1,
CHARINDEX(']', val, CHARINDEX('[reportserver', val)) - CHARINDEX('[reportserver', val) - 1) AS output
FROM yourTable;
您在 SUBSTRING
中的第一个和第二个输入是正确的,但第三个参数需要是要采用的子字符串的长度。这基本上就是[reportserver
中紧跟在[
之后的]
和后者的位置
赞成另一个答案,因为它是正确的,但只是看待它的方式略有不同——我喜欢使用 CTE 来传递诸如 CHARINDEX
之类的东西,因此代码只需要包含它们一次。
;WITH x AS
(
SELECT t = @text, c = CHARINDEX(N'[reportserver', @text)
),
y AS
(
SELECT r = SUBSTRING(t,c,4000) FROM x
),
z AS
(
SELECT o = LEFT(r, CHARINDEX(N']', r)) FROM y
)
SELECT o FROM z;
这种方法的好处(除了避免多次重复任何表达式)是能够轻松检查任何 CTE 的结果。