SQLite:从路径中隔离文件扩展名

wsewodh2  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(127)

我需要从SQLite中的路径中分离出文件扩展名。我已经阅读了这里的帖子(SQLite: How to select part of string?),其中获得了99%。
然而,解决方案:

select distinct replace(column_name, rtrim(column_name, replace(column_name, '.', '' ) ), '') from table_name;

如果一个文件没有扩展名(即文件名中没有'.'),它将返回一个空字符串。有什么方法可以捕获这个吗?
注意,在这个上下文中,文件名是最后一个'\'之后的位-它不应该在完整路径中搜索'.'s,因为它现在也在搜索。
我认为应该可以使用进一步嵌套的rtrimsreplaces来实现。

06odsfpq

06odsfpq1#

谢谢。是的,你可以这样做:
1)在SQLiteStudio的QtScript中创建一个名为“extension”的标量函数
2)代码如下:

if ( arguments[0].substring(arguments[0].lastIndexOf('\u005C')).lastIndexOf('.') == -1 )
{
  return ("");
}
else
{
  return arguments[0].substring(arguments[0].lastIndexOf('.'));
}

3)然后,在SQL查询编辑器中,可以使用

select distinct extension(PATH) from DATA

...从名为DATA的表中名为PATH的列中逐项列出不同的文件扩展名。
注意,在这个实现中,PATH字段必须包含一个反斜杠('')-即它必须是一个完整的路径。

webghufk

webghufk2#

要满足您问题中的此要求:* “如果文件没有扩展名(即文件名中没有'.'),则应返回空字符串。"*
只需在语句中添加CASE WHEN LIKE,如下所示:

select distinct case when column_name like '%.%' then replace(column_name, rtrim(column_name, replace(column_name, '.', '' ) ), '') else '' end from table_name;

或者更容易阅读(相同代码):

SELECT DISTINCT
  CASE
    WHEN column_name LIKE '%.%' THEN replace(column_name, rtrim(column_name, replace(column_name, '.', '' ) ), '')
    ELSE ''
  END
FROM table_name;

相关问题