Подстановочный знак с функцией SQL Replace? - PullRequest
2 голосов
/ 10 июня 2019

У меня есть переменная со значением, как показано ниже

DECLARE @var VARCHAR(MAX) = 'ROOT(10) AS TEN, ROOT(50) AS FIFTY, ROOT(70) AS SEVENTY'

Я хотел бы получить только 'TEN,FIFTY,SEVENTY' из переменной

Ниже я попробовал:

REPLACE(@var, 'ROOT(%) AS', '')

Может кто-нибудь дать мне представление о том, как добраться до желаемого результата?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Попробуйте это решение, используя рекурсивный CTE:

DECLARE @var varchar(max) = 'ROOT(10) AS TEN, ROOT(50) AS FIFTY, ROOT(70) AS SEVENTY'

;WITH CTE AS (
    SELECT STUFF([var], patIdx, idx - patIdx, '') [var], 1 [rn]
    FROM (
        SELECT @var [var], PATINDEX('%ROOT([0-9]%) AS %', @var) patIdx, CHARINDEX(' AS ', @var) + 4 idx
    ) a
    UNION ALL
    SELECT STUFF([var], patIdx, idx - patIdx, ''), [rn] + 1
    FROM (
        SELECT [var], PATINDEX('%ROOT([0-9]%) AS %', [var]) patIdx, CHARINDEX(' AS ', [var]) + 4 idx, [rn] FROM CTE
    ) a
    WHERE PATINDEX('%ROOT([0-9]%) AS %', [var]) > 0
)

SELECT TOP 1 [var] FROM CTE
ORDER BY [rn] DESC
0 голосов
/ 10 июня 2019
DECLARE @var varchar(max) = 'ROOT(10) AS TEN, ROOT(50) AS FIFTY, ROOT(70) AS SEVENTY'

select replace(replace(replace(@var,'ROOT(10) AS ',''),'ROOT(50) AS ',''),'ROOT(70) AS ','')
...