Sqlite:多个更新(查找和替换)不区分大小写

Sqlite: multiple update (find and replace) case insensitive

我使用 DB Browser for SQLite 来可视化和更新 sqlite 文件。

我可以执行 运行 区分大小写的查询来更新一些文本,如下所示:

UPDATE itemNotes  SET note = REPLACE(note ,  'sometext', 'abc');

但我想匹配替换 sometext 的所有大小写组合(例如 sometextSOMEtextSOmeText...)

我试过这样做:

UPDATE itemNotes  SET note = REPLACE(LOWER(note),  'sometext', 'abc');

但这会将字段 note 的全部内容转换为小写,这不是我想要的。

我也试过这些查询但没有成功:

UPDATE itemNotes  SET note = REPLACE(note, BINARY 'sometext', 'abc')
UPDATE itemNotes  SET note = REPLACE(note, COLLATE Latin1_General_CS_AS'sometext', 'abc')

我正在 zotero.sqlite 上执行此操作,它是由 file 创建的(第 85 行)。 table 是由此查询创建的

CREATE TABLE itemNotes (
    itemID INTEGER PRIMARY KEY,
    parentItemID INT,
    note TEXT,
    title TEXT,
    FOREIGN KEY (itemID) REFERENCES items(itemID) ON DELETE CASCADE,
    FOREIGN KEY (parentItemID) REFERENCES items(itemID) ON DELETE CASCADE
);

您需要在LOWER(note)中搜索子字符串,但在原始字符串中替换它。 我不知道你从哪里得到一些文本,假设你可以检查它的长度。 在下面的示例中,我将使用常量。

UPDATE itemNotes  
SET 
  note = SUBSTR(note, 0, INSTR(LOWER(note), 'sometext')) || 'abc' || SUBSTR(note, INSTR(LOWER(note), 'sometext')+sometext_len)
WHERE 
  INSTR(LOWER(note), 'sometext') >= 0;

!注意:一次只能替换一个。

Nosyara 的回答效果很好,但它一次只能删除 1 个实例。

我也在 中尝试过这个:

UPDATE itemNotes  
SET 
  note = SUBSTR(note, 0, INSTR(LOWER(note), 'sometext')) || 'abc' || SUBSTR(note, INSTR(LOWER(note), 'sometext')+sometext_len)
WHERE 
  note LIKE "%sometext%";

但是当我在字段 note 中多次出现 sometext 时,只有第一个被删除。根据对这个问题的评论,我最终使用 python 来替换 sqlite,请参阅