SQLite:如何仅选择不带扩展名的文件名?

Cod*_*uKe 5 sqlite

我需要从我拥有的表之一中提取不带扩展名的文件名。

目前我已经使用过

SELECT filename FROM files     
Run Code Online (Sandbox Code Playgroud)

用于返回整个文件名(Jessica.Timber.mp3)。那么是否可以使用 sqlite 仅获取文件名(例如: Jessica.Timber )?文件可能包含多个“.” 但只有最后一个点后面的 ext 应该被删除。

我尝试了以下查询,如果扩展名只有 3 个字母长(例如:*.mp3),它会提供结果,但如果扩展名超过这个长度(例如:*.flac),则会失败

SELECT substr(filename, -4, -100) from files;    
Run Code Online (Sandbox Code Playgroud)

Aun*_*Aun 6

下面是查询 - 将为您提供不带扩展名的文件名,无论扩展名长度如何。文件名可以包含任意数量的.字符(经过测试和验证)

select replace(filename
             , '.' || replace(filename
                            , rtrim(filename, replace(filename, '.', '') )
                            , '')
             , '')
  from files;
Run Code Online (Sandbox Code Playgroud)

测试:

create table files (filename);
insert into files values ("ph.otoJpg.jpg"), ("ph.otoJpeg.jpeg");
Run Code Online (Sandbox Code Playgroud)

那么上面的代码会产生:

ph.otoJpg.
ph.otoJpeg.
Run Code Online (Sandbox Code Playgroud)


CL.*_*CL. 1

SQLite 没有内置的字符串函数来帮助解决这个问题。

可以创建递归 CTE,但最简单的方法是检索整个文件名并删除代码中的扩展名。