1

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

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

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

欢迎任何有关解决方案或替代方案的想法。

4

2 回答 2

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;
于 2019-07-31T03:05:53.063 回答
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 
于 2019-08-01T22:39:33.970 回答