4

有包含文件名的表列:image1.jpg,image12.png,script.php,.htaccess,...

我只需要选择文件扩展名。我宁愿这样做:

SELECT DISTINCT SUBSTR(column,INSTR('.',column)+1) FROM table

但我的 SQLite 版本不支持 INSTR。

有没有办法在不使用 INSTR 函数的情况下实现它?

4

2 回答 2

8

以下是仅用于选择文件扩展名的查询(经过测试和验证)。您的文件名可以包含任意数量的.字符 - 仍然可以工作

从表名中选择不同的替换(列名,rtrim(列名,替换(列名,'.','')),'');

column_name是您拥有文件名的列的名称(文件名可以有.多个

table_name是你的桌子的名字

于 2014-11-11T11:15:22.807 回答
6

试试这个ltrim(X, Y)功能,这就是文档所说的:

ltrim(X,Y) 函数返回一个字符串,该字符串是通过从 X 的左侧删除 Y 中出现的任何和所有字符而形成的。

列出所有字母作为第二个参数,例如

SELECT ltrim(column, "abcd...xyz1234567890") From T

这应该从左边删除所有字符,直到.. 如果您需要不带点的扩展名,请使用SUBSTR它。当然,这意味着文件名不能包含多个点。

但我认为在执行查询的代码中提取扩展名更容易、更安全。

于 2013-02-16T11:20:27.737 回答