一个函数,用于清除SQL中两个特定字符之间的所有字符?

一个函数,用于清除SQL中两个特定字符之间的所有字符?,sql,sql-server,Sql,Sql Server,我需要浏览一列varchar,在每条记录中,我需要去掉字符(并删除字符) 例如,如果记录中的字符串为: "<120012012sasdcdf sadasd>help <rando mchars werewr>me<e randss>." “帮帮我。” 我应该以:“救救我。” 如果下一个字符串是:“hi。” 然后我会得到:嗨。 有没有一个函数可以帮助我做到这一点 谢谢 理论上当然可以-带有递归查询的SQL是图灵完备语言 您的示例可以使用以下类型的“解析器”来

我需要浏览一列
varchar
,在每条记录中,我需要去掉字符
(并删除
字符)

例如,如果记录中的字符串为:

"<120012012sasdcdf sadasd>help <rando mchars werewr>me<e randss>."
“帮帮我。”
我应该以:
“救救我。”

如果下一个字符串是:
“hi。”

然后我会得到:
嗨。

有没有一个函数可以帮助我做到这一点


谢谢

理论上当然可以-带有递归查询的SQL是图灵完备语言

您的示例可以使用以下类型的“解析器”来解决:

WITH STRT AS(
    SELECT SRC_STR = 'hi <blah><blah>.'
    --SELECT SRC_STR = '<120012012sasdcdf sadasd>help <rando mchars werewr>me<e randss>.'
),
REC AS (
    SELECT 
        N = 1
        ,LITERA = SUBSTRING(src_str,1,1)
        ,PREV_STATE = 
            CASE 
                WHEN SUBSTRING(src_str,1,1) = '<' THEN 1
                ELSE 0
            END
        ,CUR_STATE = 
            CASE 
                WHEN SUBSTRING(src_str,1,1) = '<' THEN 1
                ELSE 0
            END
        FROM STRT
    UNION ALL 
    SELECT 
        N = N + 1
        ,LITERA = SUBSTRING(src_str,N+1,1)
        ,PREV_STATE = CUR_STATE 
        ,CUR_STATE = 
            CASE
                WHEN SUBSTRING(src_str,N+1,1) = '<'
                        AND PREV_STATE = 0
                    THEN 1
                WHEN SUBSTRING(src_str,N+1,1) = '>' 
                     AND SUBSTRING(src_str,N+2,1) <> '<'
                    AND PREV_STATE = 1
                    THEN 0                  
                ELSE CUR_STATE
            END
    FROM REC,STRT
        WHERE
            N < LEN(src_str)
)
SELECT REPLACE(
    (SELECT '~' + LITERA 
        FROM REC
        WHERE
            PREV_STATE = CUR_STATE
            AND PREV_STATE = 0
        FOR XML PATH('')
    ),'~','')
将STRT作为(
选择SRC_STR='hi'
--选择SRC_STR='帮助我'
),
REC AS(
挑选
N=1
,LITERA=子串(src_str,1,1)
,上一个州=
案例

当SUBSTRING(src_str,1,1)=“的可能重复项”时,用纯SQL无法以一般方式实现这一点。您已经参考了特定的实现和RDBMS,并在第二个示例中使用了regexp,为什么返回的数据不
hi.
注意空格。@JamesZ谢谢,这很完美。谢谢。我也会注意您的警告。