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

How to search for multiple substrings using instr()

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

我试过 OR 语句,例如。 instr(string,"jpg" OR "mp4"), 没有运气.

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

欢迎提出解决方案或备选方案的任何想法。

这就是您所需要的。

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;

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

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

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

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