You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过含目标值的搜索词在SQL表中匹配对应目录路径?

问题分析与解决方案

你的核心问题是SQL查询的逻辑方向搞反了:当前代码是检查「路径是否包含搜索词」,但你实际需要的是「搜索词是否包含路径中的目标编号(即路径最后一段的200000)」。以下是具体解决方法:

1. 修正查询逻辑

需要从Directory字段中提取出路径的最后一段(也就是目标编号200000),再判断搜索词是否包含这个编号。不同数据库的字符串处理函数略有差异,以下是主流数据库的实现:

MySQL/MariaDB 示例

direc = "Directory"
searchfor = "sometext_200000_sometext"
# 使用参数化查询避免SQL注入,同时提取路径最后一段
sql = text("SELECT * FROM table_name WHERE :searchfor LIKE CONCAT('%', SUBSTRING_INDEX(Directory, '\\\\', -1), '%')")
# 执行查询时传入参数
result = session.execute(sql, {"searchfor": searchfor})
  • SUBSTRING_INDEX(Directory, '\\', -1):提取路径中最后一个反斜杠后的内容(即200000)
  • CONCAT('%', ..., '%'):拼接成模糊匹配的格式,检查搜索词是否包含该编号

SQL Server 示例

sql = text("SELECT * FROM table_name WHERE @searchfor LIKE '%' + RIGHT(Directory, CHARINDEX('\', REVERSE(Directory)) - 1) + '%'")
result = session.execute(sql, {"searchfor": searchfor})

SQLite 示例

sql = text("SELECT * FROM table_name WHERE :searchfor LIKE '%' || SUBSTR(Directory, INSTR(REVERSE(Directory), '\') * -1) || '%'")
result = session.execute(sql, {"searchfor": searchfor})

2. 关键注意事项

  • 禁止用f-string直接拼接SQL:你之前的写法存在严重的SQL注入风险,必须使用参数化查询传递变量
  • 反斜杠转义:在SQL字符串中,反斜杠需要用双反斜杠\\进行转义,避免被解析为转义字符

内容的提问来源于stack exchange,提问作者Bernhard Sailer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:01:08