返回SQL Server中某行中给定HTML标记内的子字符串
我在下面的返回SQL Server中某行中给定HTML标记内的子字符串,sql,sql-server,sql-server-2008,substring,Sql,Sql Server,Sql Server 2008,Substring,我在下面的表格中有3行- 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>
表格中有3行
-
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
为此,我在下面写下了疑问-
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
当CHARINDEX('By',FormattedBody,-1)=1时,则LTRIM(替换(左侧(转换为nvarchar(最大)),CHARINDEX('',FormattedBody)-1,'By','','')
否则“Mercola博士”以名字结尾
上述查询
返回前两行
的预期输出
,但不返回第三行
。它返回美国知情权联合创始人兼执行董事Gary Ruskin
请告诉我应该对查询
进行哪些其他更改以获得预期结果
。提前感谢 您的模式匹配正在查找
以结束名称
然而,这些例子表明,的情况
什么时候
CHARINDEX('By',FormattedBody,-1)=1
然后
子字符串(FormattedBody,15,CHARINDEX(“)用于下面的查询,并针对每种情况正常工作-
CASE WHEN CHARINDEX('<p><strong>By', FormattedBody, -1)=1 THEN LTRIM(SUBSTRING(REPLACE(CAST(FormattedBody as varchar(max)),'<p><strong>By ',''),0,CHARINDEX('<',REPLACE(cast(FormattedBody as varchar(max)),'<p><strong>By ',''))))
ELSE 'Dr.Mercola' END as Name
当CHARINDEX('By',FormattedBody,-1)=1,然后LTRIM(子字符串(替换(将格式化body转换为varchar(max)),'By','')0,CHARINDEX('对于每一行返回NULL
,这显然是@PranavBilurkar…,只需在CHARINDEX()中添加一个附加参数)
因此它会在字符串的后面开始搜索。
(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
SELECT SUBSTRING(REPLACE(col,'<p><strong>By ',''),0,CHARINDEX('<',REPLACE(col,'<p><strong>By ','')))
FROM (VALUES
('<p><strong>By Dr. Mercola</strong></p> <blockquote> <p>In an interview with ElectromagneticHealth.org'),
('<p><strong>By Barbara Loe Fisher</strong></p> <blockquote> <p>Here we are in the winter of 2015, and '),
('<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')
) as t (col)
Dr. Mercola
Barbara Loe Fisher
Gary Ruskin
Case
When
CHARINDEX('<p><strong>By', FormattedBody, -1) = 1
Then
SUBSTRING(FormattedBody,15, CHARINDEX('<', FormattedBody, 15)-15)
Else
'Dr.Mercola'
END as Name
CASE WHEN CHARINDEX('<p><strong>By', FormattedBody, -1)=1 THEN LTRIM(SUBSTRING(REPLACE(CAST(FormattedBody as varchar(max)),'<p><strong>By ',''),0,CHARINDEX('<',REPLACE(cast(FormattedBody as varchar(max)),'<p><strong>By ',''))))
ELSE 'Dr.Mercola' END as Name