我在下面3 rows
在 table
-
1. <p><strong>By Dr. Mercola</strong></p> <blockquote> <p>In an interview with ElectromagneticHealth.org
2. <p><strong>By Barbara Loe Fisher</strong></p> <blockquote> <p>Here we are in the winter of 2015, and
3. <p><strong>By Gary Ruskin<br> Co-Founder and Executive Director, U.S. Right to Know</strong></p> <blockquote> <p>U.S. Right to Know
从上面的行我想 fetch
一个substring
想要一个result
如下 -
Dr. Mercola
Barbara Loe Fisher
Gary Ruskin
为此,我在下面编写了查询 -
CASE WHEN CHARINDEX('<p><strong>By', FormattedBody, -1)=1 THEN LTRIM(REPLACE(LEFT(CAST(FormattedBody as nvarchar(max)),CHARINDEX('</strong>', FormattedBody)-1),'<p><strong>By',''))
ELSE 'Dr.Mercola' END as Name
以上query
返回预期的 output
对于first 2 rows
,但不适用于third row
。它返回 Gary Ruskin<br> Co-Founder and Executive Director, U.S. Right to Know
请告诉我应该对 query
进行哪些额外更改获取expected results
。提前致谢。!!
最佳答案
您的模式匹配正在寻找</strong>
结束名称。
但是,示例表明 <
足以达到这个目的。很难想象一个人的名字带有这个字符,所以使用它似乎是安全的。
所以,你可以尝试:
(CASE WHEN CHARINDEX('<p><strong>By', FormattedBody, -1) = 1
THEN LTRIM(REPLACE(LEFT(CAST(FormattedBody as nvarchar(max)), CHARINDEX('<', FormattedBody) - 1, 12), '<p><strong>By', ''))
ELSE 'Dr.Mercola'
END) as Name
关于sql - 返回 SQL Server 行中给定 HTML 标记内的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37832400/