【问题标题】:How to search for multiple substrings using instr()如何使用 instr() 搜索多个子字符串
【发布时间】:2019-07-31 03:02:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你标记了这个 sqlite 和 MySQL。你用的是哪一个?
  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。样本数据和期望的结果真的很有帮助。
  • 对不起。我的错误,使用 sqlite

标签: sql sqlite substring instr


【解决方案1】:

这是你需要的。

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;

【讨论】:

    【解决方案2】:

    假设列中可能只存在'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 
    

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2014-03-31
      • 2020-06-25
      • 1970-01-01
      • 2012-10-15
      • 2012-11-24
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多