sql - 返回 SQL Server 行中给定 HTML 标记内的子字符串

标签 sql sql-server sql-server-2008 substring

我在下面3 rowstable -

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/

相关文章:

sql - PostgreSQL 将记录转换为复合类型

java - 如何使用java拍摄多个应用程序的屏幕截图,即多个https URL?

sql - where 子句中存在大量参数

sql-server - SQL Server 2008 中的 CSV 导入

c# - 每个 parent 只选择 1 个 child

asp.net - 优化asp.net中的搜索引擎

sql - 连接三张表,主表在中间

mysql - 子查询的连接等效项

sql-server - Azure Connect - 无法访问本地托管的数据库

java - 使用 Java 连接到 SQL 服务器