Sql server 如何通过sql server查询获取方括号[]中写入的文本

Sql server 如何通过sql server查询获取方括号[]中写入的文本,sql-server,Sql Server,如何通过sql server查询获取方括号[]中写入的文本 输入: test1/test2/test3[ab]/test4[c] 输出: ab c 范例 返回 在原始答案上,您使用以下逻辑- DECLARE @Test VARCHAR(MAX) = 'test1/test2/test3[ab]/test4[c]' DECLARE @TempTab TABLE ( Val VARCHAR(100) ) DECLARE @Loop INT = 1 DECLARE @St INT =

如何通过sql server查询获取方括号[]中写入的文本

输入:

test1/test2/test3[ab]/test4[c]
输出:

ab  
c
范例

返回


在原始答案上,您使用以下逻辑-

DECLARE @Test VARCHAR(MAX) = 'test1/test2/test3[ab]/test4[c]'
DECLARE @TempTab TABLE (
    Val VARCHAR(100)
)

DECLARE @Loop INT = 1
DECLARE @St INT = 0
DECLARE @End INT = 0

WHILE @Loop <= (SELECT LEN(@Test))

BEGIN
   IF SUBSTRING(@Test, @Loop, 1) = CASE WHEN @St = 0 THEN '[' ELSE ']' END
   BEGIN
       IF @St = 0
           SET @St = @Loop + 1
       ELSE 
           SET @End = @Loop
   END

   IF @St <> 0 AND @End <> 0
   BEGIN
       INSERT INTO @TempTab(Val)
       SELECT  SUBSTRING (@Test,@St,@End-@St)

       SET @St = 0
       SET @End = 0
   END

    SET @Loop = @Loop +1
END

SELECT * FROM @TempTab

应添加字符串\u分割udf函数源control@DanielN内置函数2016+@DanielN如果不是2016+,则可能有拆分/解析函数可用。实际上,任何人都会避免循环函数示例:
SomeCol                         NewValue
test1/test2/test3[ab]/test4[c]  ab
test1/test2/test3[ab]/test4[c]  c
DECLARE @Test VARCHAR(MAX) = 'test1/test2/test3[ab]/test4[c]'
DECLARE @TempTab TABLE (
    Val VARCHAR(100)
)

DECLARE @Loop INT = 1
DECLARE @St INT = 0
DECLARE @End INT = 0

WHILE @Loop <= (SELECT LEN(@Test))

BEGIN
   IF SUBSTRING(@Test, @Loop, 1) = CASE WHEN @St = 0 THEN '[' ELSE ']' END
   BEGIN
       IF @St = 0
           SET @St = @Loop + 1
       ELSE 
           SET @End = @Loop
   END

   IF @St <> 0 AND @End <> 0
   BEGIN
       INSERT INTO @TempTab(Val)
       SELECT  SUBSTRING (@Test,@St,@End-@St)

       SET @St = 0
       SET @End = 0
   END

    SET @Loop = @Loop +1
END

SELECT * FROM @TempTab