如何使用instr()搜索多个子字符串

时间:2019-07-31 03:02:12

标签: sql sqlite substring instr

我正在尝试使用instr()获取给定字符串中文件扩展名的位置。这可能是许多可能的扩展,所以我需要搜索多个子字符串(例如“ jpg”,“ mp4” ...)。

例如,我尝试了OR语句。 instr(string,“ jpg”或“ mp4”),没有运气。

SELECT instr(column, "jpg") FROM table;

任何关于解决方案或替代方案的想法都将受到欢迎。

2 个答案:

答案 0 :(得分:2)

这是您所需要的。

SELECT CASE WHEN instr(column, "jpg") > 0 
   THEN instr(column, "jpg") WHEN instr(column, "mp4") > 0 
   THEN instr(column, "mp4") ELSE 0 END  FROM table;

答案 1 :(得分:0)

假设该列中只能存在'jpg''mp4'或任何其他扩展名之一,那么您可以使用以下代码:

SELECT instr(column, "jpg") + instr(column, "mp4") + .... FROM table;

对于所有不存在的扩展名instr()将返回0,因此结果将是现有扩展名的起始位置。
如果将所有扩展名存储在名称为extensions的表中,且其列为name,则可以将其扩展连接到表中并获得结果:

select
  t.column, sum(instr(t.column, e.name)) position
from table t cross join extensions e
group by t.column