如何使用 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
我正在尝试使用 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