是否可以使用patIndex查找字符位置,只知道存储在varchar中的模式的开头和结尾?
我尝试过使用此功能,但它会返回' 0'每次
select @emptyTag= patindex('<span%></span',@pmReportText)
下面是varchar(@pmReportText
)的一个小片段,我想用红色标记的位置,图案标记为绿色(第一个字符为红色)
Varchar Sample as Text: <span style="font-size: 14pt;"><b><span style="font-size: 14pt;"><b><span style="font-size: 14pt;"><b><span style="font-size: 14pt;"><span style="font-size: 14pt;"></span>
注意: 我需要这样做的原因是从由于RadEditor错误而插入的db条目中删除空标记。标签中可以有不同的长度样式,这就是我不知道长度的原因。我需要保留RadEditor文本样式,否则我会删除所有HTML。 varchar包含超过128个级别,因此我无法使用xml。
答案 0 :(得分:0)
执行此操作的一种方法是获取字符串拆分例程,然后拆分字符串&#39;&gt;&lt;&#39;上的所有文本。这将为您提供一个字符串列表,这些字符串可以使用更简单的代码集进行解析。例如,假设您将拆分器的输出放入临时表#tmp(创意命名!)。然后,让我们编写一些解析代码,不做任何关于字符串的假设。
首先要注意的一点是:当你以这种方式使用字符串拆分器时,你应该在结束字符和起始字符之间放置一个换行符(如果使用单个字符串,则应该在拆分字符串之后),而不是用一行代替它们打破。这提高了解析代码的效率。
我假设临时表结构是:
CREATE TABLE #tmp (id int identity primary key, data varchar(max))
识别空跨度的代码是:
SELECT *
FROM #tmp t1
INNER JOIN #tmp t2
ON t1.id = t2.id - 1
WHERE t2.data LIKE '</Span>%'
AND t1.data LIKE '%<Span%>' -- Is the startspan in this string?
AND RIGHT(t1.data, 1) = '>' Is a tag at the end of the string
-- Is there not another close tag after the last Span starts?
AND (SUBSTRING(t1.data, Len(t1.data) - (CHARINDEX(REVERSE(t1.data), 'napS<') + 4, LEN(t1.data) NOT LIKE '%>%>'
希望这会有所帮助。