2015-12-22 107 views
0

我需要在SQLite中将路径中的文件扩展名隔离出来。我读过这里的帖子(SQLite: How to select part of string?),其中有99%。SQLite:从路径中分离文件扩展名

然而,溶液:如果一个文件具有(“”中的文件名,即没有)没有扩展,为此它应返回一个空字符串

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

失败。有没有什么办法可以把这个陷阱?

请注意,在此上下文中的文件名是最后一个'\'之后的位 - 它不应该在完整路径中搜索'.'s,因为它在当时也是如此。

我认为它应该有可能使用进一步嵌套rtrimsreplaces

+0

我不认为这是可能的普通SQLite3。但是,SQLite3支持自定义函数,这将使它微不足道。你使用SQLite3的哪种语言? – Amadan

+0

我在SQLiteStudio中交互式地使用查询。 – Andrew17856

+0

http://wiki.sqlitestudio.pl/index.php/User_Manual#Custom_SQL_functions – Amadan

回答

1

谢谢。是的,你可以做到这一点是这样的:

1)在QtScript在SQLiteStudio

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 

...到itemise从叫PATH中称为数据的表列中的不同的文件扩展名。

请注意,在此实现中PATH字段必须包含反斜线('\') - 即它必须是完整路径。

相关问题