我有一张像下面这样的表格
Table_Name
id Column_Desc
1 <p><img src="images/abc.png" alt=""/></p>
我想从此列中获取此 src“imageUrl”
实际上我想在删除数据时使用此 src
我想从服务器中删除图像,
我需要一种方法如何从列中获取此路径
我有一张像下面这样的表格
Table_Name
id Column_Desc
1 <p><img src="images/abc.png" alt=""/></p>
我想从此列中获取此 src“imageUrl”
实际上我想在删除数据时使用此 src
我想从服务器中删除图像,
我需要一种方法如何从列中获取此路径
您可以使用字符串函数的尴尬组合从列中提取图像 URL:
select substring(
html,
charindex('<img src="',html)+10,
charindex(
'"',
html,
charindex('<img src="',html) + 10
) -
charindex('<img src="',html) - 10
)
from foo;
它标记<img src="
字符串中第一次出现的开始,并在开始之后的第一次出现结束"
。这些是简化的假设,不适用于所有可能的有效 HTML 输入。但它应该在合理的输入上起作用。
更新 2:这可以通过递归查询来扩展以查找所有 URL:
还更新以处理没有图像 url 的情况
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;
这有点乱,但它有效。基本思想是找到第一个图像 url,然后在该图像 url 结束后再次执行搜索。
如果你需要做得更好,你可能不应该尝试在 SQL 中处理它;而是使用可以解析 HTML 的编程语言。
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;
}
谢谢你们所有人......我已经用这个逻辑实现了我的目标
我认为您所追求的是以下内容:
delete from "Table_Name" where "Column_Desc" like '%images/abc.png%'
我认为这会给你你想要的,虽然我会用
select "Column_Desc" from "Table_Name" where "Column_Desc" like '%images/abc.png%'
首先确保它只返回你想要的。