一个函数,用于清除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谢谢,这很完美。谢谢。我也会注意您的警告。