mysql - 提取具有特定模式的子字符串
问题描述
我确实想从数据库中提取某些值以将文件重新加载到新服务器中。我可以从旧服务器复制并粘贴到新服务器,但我不希望旧文件在那里不再使用。所以这就是我想要做的。
在这个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 文件名时......由于图像文件名跨越多个单元格并且它们以某种模式重复......我试图在这里搜索并找到了这个主题。
所以,我试着放一些我自己的数据……但我的结果不是我想要的。 SQL 小提琴尝试
因此,我想知道是否有更清洁的方法来做到这一点。可能必须堆叠成对substring
和/或left
功能。
解决方案
推荐阅读
- python - 有没有一种好方法可以围绕一些非零值“翻转”数字列表/矩阵?
- jmeter - JMeter JDBC requets 中是否可以批量更新
- spring - Spring Rest Doc junit 5 参数化测试支持
- authentication - 使用 MarkLogic 在 HTTP 服务器上设置应用程序级身份验证
- reactjs - 有没有办法在 create-react-app 中显示开发构建文件?
- python - 如何从已安装的 Drive 文件夹中永久删除?
- vue.js - Nuxt 在拆分 .vue 文件时会生成不需要的路由。如何只获得我想要的路线?
- javascript - React hooks useEffect 在添加空依赖数组后不会停止获取
- java - KafkaListenerEndpointContainer 无法使用 Spring Kafka 创建 Kafka 事务
- asp.net - IIS Web 应用程序无法在同一网络上访问,但 Apache 应用程序可以