首页 > 解决方案 > 带有修改列值的 sql where 闭包

问题描述

我有一个包含 URL 的主表:

CREATE TABLE IF NOT EXISTS MasterTable (url, masterId, PRIMARY KEY(url), UNIQUE(masterId));

一个 url 字符串如下所示:file:///Users/user1/Pictures/rubus_and_apple.jpeg.

现在我想查找 url 列,但只查找文件名rubus_and_apple,而不是所有 url 字符串。(仅在不带扩展名的 url 的最后一个组件上表示)。

例如,我想查看关键字rubus并获取 url: file:///Users/user1/Pictures/rubus_and_apple.jpeg

我需要我的查询是这样的:

SELECT masterId
FROM MasterTable
WHERE <url last component w/o extension> LIKE '%/rubus%';

我该怎么做?

标签: sqlite

解决方案


你可以使用LIKE

SELECT masterId
FROM MasterTable
WHERE url LIKE '%/rubus.%';

请注意,此表达式不是 SARGable,因此它不会使用索引。

编辑:

WITH MasterTable(MasterId, url) AS(
  VALUES(1, 'file:///Users/user1/Pictures/rubus_and_apple.jpeg')
)
SELECT *
FROM MasterTable
WHERE REPLACE(url,RTRIM(url,REPLACE(url,'/','')),'') LIKE '%' || 'rubus' || '%';
      -- part of string after last /

db<>小提琴演示


推荐阅读