首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法通过SQL获取不带扩展名的文件名?

有没有办法通过SQL获取不带扩展名的文件名?
EN

Stack Overflow用户
提问于 2018-12-20 18:55:28
回答 3查看 1.8K关注 0票数 2

我正在编写一个查询,该查询要求从文件的目录位置获取文件的名称,但不包括文件路径和文件扩展名

示例:如果路径存在于c:\temp\example.xls,我需要查询的结果作为示例。

我已经参考了站点https://www.techonthenet.com/oracle/questions/filename.php,它显示了一种获取带有扩展名的文件名的方法。我想知道有没有其他方法可以直接获取文件名。

这是我使用的代码:

代码语言:javascript
复制
CREATE or REPLACE function get_filename
   (p_path IN VARCHAR2)
   RETURN varchar2

IS
   v_file VARCHAR2(100);

BEGIN

   -- Parse string for UNIX system
   IF INSTR(p_path,'/') > 0 THEN
      v_file := SUBSTR(p_path,(INSTR(p_path,'/',-1,1)+1),length(p_path));

   -- Parse string for Windows system
   ELSIF INSTR(p_path,'\') > 0 THEN
      v_file := SUBSTR(p_path,(INSTR(p_path,'\',-1,1)+1),length(p_path));

   -- If no slashes were found, return the original string
   ELSE
      v_file := p_path;

   END IF;

   RETURN v_file;

END;

它创建了一个函数,用于从具有其扩展名的位置获取文件名。

代码语言:javascript
复制
SELECT get_filename('c:\temp\example.xls')
FROM dual;

这条SQL语句将返回example.xls.Is,有一种方法可以只获取example作为结果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-20 19:03:00

您可以删除扩展名;搜索最后一个点(或者,如果从右向左查找,则搜索第一个点),并提取从第一个字符到点位置的所有内容。例如:

代码语言:javascript
复制
SQL> WITH test (v_file) AS
  2    (SELECT 'my example.xls' FROM DUAL)
  3  SELECT SUBSTR (v_file, 1, INSTR (v_file, '.', -1) - 1) result
  4    FROM test;

RESULT
----------
my example

SQL>

在您的情况下,这将是

代码语言:javascript
复制
return SUBSTR (v_file, 1, INSTR (v_file, '.', -1) - 1)
票数 4
EN

Stack Overflow用户

发布于 2018-12-20 19:55:37

您可以使用REGEXP_SUBSTR,两次:

代码语言:javascript
复制
WITH tests(filepath) AS (
    SELECT 'c:\path\to\example.xls' FROM DUAL
    UNION ALL
    SELECT 'c:\path\to\example' FROM DUAL
    UNION ALL
    SELECT 'example.xls' FROM DUAL
    UNION ALL
    SELECT 'example' FROM DUAL
)
SELECT filepath, REGEXP_SUBSTR(REGEXP_SUBSTR(filepath, '[^\]+$'), '[^\.]+')
FROM tests
票数 3
EN

Stack Overflow用户

发布于 2018-12-28 00:06:32

您只需要调用一次REGEXP_SUBSTR。此示例将整个路径解析为其各个部分。对于OP的答案,您只需要对REGEXP_SUBSTR进行第二次调用。

编辑:已更新,现在可以处理带有多个点的文件名和以点开头的文件名。

代码语言:javascript
复制
WITH tbl(ID, fullpath) AS (
    SELECT 1, 'c:\path\to\example.xls' FROM DUAL UNION ALL
    SELECT 2, 'c:\path\to\example.1.2.xls' FROM DUAL UNION ALL    
    SELECT 3, 'c:\path\to\example' FROM DUAL UNION ALL
    SELECT 4, 'example.xls' FROM DUAL UNION ALL
    SELECT 5, 'example.1.2.xls' FROM DUAL UNION ALL    
    SELECT 6, 'example' FROM DUAL UNION ALL
    SELECT 7, NULL FROM DUAL
)
SELECT ID, fullpath, 
  REGEXP_SUBSTR(fullpath, '^(.*\\)?(.+?)(\.[^.]*$|$)', 1, 1, null, 1) path,
  REGEXP_SUBSTR(fullpath, '^(.*\\)?(.+?)(\.[^.]*$|$)', 1, 1, NULL, 2) filename,
  REGEXP_SUBSTR(fullpath, '^(.*\\)?(.+?)(\.[^.]*$|$)', 1, 1, null, 3) extension
FROM tbl
order by ID;


 ID FULLPATH                   PATH         FILENAME     EXTEN
--- -------------------------- ------------ ------------ -----
  1 c:\path\to\example.xls     c:\path\to\  example      .xls 
  2 c:\path\to\example.1.2.xls c:\path\to\  example.1.2  .xls 
  3 c:\path\to\example         c:\path\to\  example           
  4 example.xls                             example      .xls 
  5 example.1.2.xls                         example.1.2  .xls 
  6 example                                 example           
  7                                                           

7 rows selected.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53867281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档