首页 > 解决方案 > 提取具有特定模式的子字符串

问题描述

我确实想从数据库中提取某些值以将文件重新加载到新服务器中。我可以从旧服务器复制并粘贴到新服务器,但我不希望旧文件在那里不再使用。所以这就是我想要做的。

在这个products_description表中,它存储了 HTML 代码。

这是架构

样本产品数据

我想提取以下子字符串:

/zc156/product_pdf/[manufacturer]/[name].pdf
/zc156/product_img/[manufacturer]/[name].jpg
/zc156/product_img/[manufacturer]/[name].png

通过使用以下 2 个查询,我确实设法获得了大多数(如果不是全部 PDF)文件......

对于第一个 PDF 文件

SELECT
    SUBSTRING(`products_description`.`products_description`, 
      LOCATE('/zc156/product_pdf/', `products_description`.`products_description`),
      LOCATE('.pdf', `products_description`.`products_description`) - LOCATE('/zc156/product_pdf/', `products_description`.`products_description`) + 4)
AS 'ProductFile' FROM `products_description`
INNER JOIN `products` ON `products`.`products_id` = `products_description`.`products_id`
WHERE CONVERT(`products_description` USING utf8) LIKE '%/zc156/product_pdf/%'
AND `products`.`products_status` = 1

对于其余的 PDF 文件

SELECT
    SUBSTRING(`products_description`.`products_description`, 
      LOCATE('</a>', `products_description`.`products_description`),
      LOCATE('</tr>', `products_description`.`products_description`) - LOCATE('</a>', `products_description`.`products_description`))
AS 'ProductFile' FROM `products_description`
INNER JOIN `products` ON `products`.`products_id` = `products_description`.`products_id`
WHERE CONVERT(`products_description` USING utf8) LIKE '%/zc156/product_pdf/%'
AND `products`.`products_status` = 1

但是,当涉及到 JPG 或 PNG 文件名时......由于图像文件名跨越多个单元格并且它们以某种模式重复......我试图在这里搜索并找到了这个主题。

在 MySql 中提取具有特定模式的子字符串

所以,我试着放一些我自己的数据……但我的结果不是我想要的。 SQL 小提琴尝试

因此,我想知道是否有更清洁的方法来做到这一点。可能必须堆叠成对substring和/或left功能。

标签: mysqlphpmyadmin

解决方案


推荐阅读