我有一张如下表
Table_Name
id Column_Desc
1 <p><img src="images/abc.png" alt=""/></p>
我想从这个列中获取此src“imageUrl”
实际上我想删除数据时使用这个src
我想从服务器上删除图像,
我需要一种如何从列
答案 0 :(得分:1)
您可以使用字符串函数的笨拙组合从列中提取图像URL:
select substring(
html,
charindex('<img src="',html)+10,
charindex(
'"',
html,
charindex('<img src="',html) + 10
) -
charindex('<img src="',html) - 10
)
from foo;
See a working SQLFiddle example here
它标志着字符串中第一次出现<img src="
时的开始,以及开始后第一次"
处的结束。这些是简化假设,不适用于每个可能的有效HTML输入。但它应该合理投入。
更新2:可以使用递归查询对其进行扩展,以查找所有网址:
还更新以处理没有图片网址的情况
with all_img_urls as (
select id,
cast(null as char(1000)) as url,
html
from foo
where charindex('<img src="',html) > 0
union all
select id,
cast(substring(
html,
charindex('<img src="',html)+10,
charindex(
'"',
html,
charindex('<img src="',html) + 10
) -
charindex('<img src="',html) - 10
) as char(1000)) as url,
cast(substring(
html,charindex('"',html,charindex('<img src="',html) + 10),1000
) as char(1000)) as html
from all_img_urls
where charindex('<img src="',html) > 0
)
select id,url from all_img_urls where url is not null;
这有点乱,但它确实有效。基本思路是找到第一个图像网址,然后在该图像网址结束后再次执行搜索。
如果你需要做得更好,你可能不应该尝试在SQL中处理这个问题;而是使用可以解析HTML的编程语言。
答案 1 :(得分:0)
我认为你所追求的是以下内容:
delete from "Table_Name" where "Column_Desc" like '%images/abc.png%'
我认为这会给你你想要的东西,虽然我会用
检查select "Column_Desc" from "Table_Name" where "Column_Desc" like '%images/abc.png%'
首先要确保它只返回你想要的东西。
答案 2 :(得分:0)
public List<String> FetchLinksFromSource(string htmlSource)
{
List<String> links = new List<String>();
string regexImgSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in matchesImgSrc)
{
string href = m.Groups[1].Value;
links.Add(href);
}
foreach (string s in links)
{
string FilePath = Server.MapPath("~/");
FilePath += s;
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
FilePath = "";
}
return links;
}
Thanx Alot All you You ...我已经用这个逻辑实现了我的目标