从特定列获取特定值

时间:2013-04-04 12:52:57

标签: sql sql-server sql-server-2008-r2

我有一张如下表

Table_Name

id   Column_Desc
1    <p><img src="images/abc.png" alt=""/></p>

我想从这个列中获取此src“imageUrl” 实际上我想删除数据时使用这个src 我想从服务器上删除图像,
我需要一种如何从列

获取此路径的方法

3 个答案:

答案 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;

Updated SQLFiddle

这有点乱,但它确实有效。基本思路是找到第一个图像网址,然后在该图像网址结束后再次执行搜索。

如果你需要做得更好,你可能不应该尝试在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 ...我已经用这个逻辑实现了我的目标