Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回SQL Server中某行中给定HTML标记内的子字符串_Sql_Sql Server_Sql Server 2008_Substring - Fatal编程技术网

返回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