Sql 如何在Oracle中去掉文件扩展名(.docx、.pdf等),同时将分隔数据从单个列中分离出来
所以我得到了这样的东西: (本例中,3个空格为分隔符) 我已设法将这3个实体分成3列。然而;我还有最后一步;我试图从FileName.xml中去掉“.xml” 我得到了以下信息,但不起作用:Sql 如何在Oracle中去掉文件扩展名(.docx、.pdf等),同时将分隔数据从单个列中分离出来,sql,oracle,Sql,Oracle,所以我得到了这样的东西: (本例中,3个空格为分隔符) 我已设法将这3个实体分成3列。然而;我还有最后一步;我试图从FileName.xml中去掉“.xml” 我得到了以下信息,但不起作用: select SUBSTR(SUBSTR(data_String, - instr(reverse(data_String), ' ' + 1)), nullif( instr(SUBSTR(data_String, - instr(reverse(data_String), ' '
select
SUBSTR(SUBSTR(data_String, - instr(reverse(data_String), ' ' + 1)),
nullif( instr(SUBSTR(data_String, - instr(reverse(data_String), ' ') + 1), '.', -1) +1, 1) )
提前谢谢
Oracle 11g R2架构设置:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
查询1-字符串函数:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
查询2-正则表达式:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
Oracle 11g R2架构设置:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
查询1-字符串函数:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
查询2-正则表达式:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
:
CREATE TABLE table_name ( data_string ) AS
SELECT 'C:\Desktop JSchmoe FileName.xml' FROM DUAL;
SELECT SUBSTR(
data_string,
1,
INSTR( data_string, ' ' )
) AS filepath,
SUBSTR(
data_string,
INSTR( data_string, ' ' ) + 3,
INSTR( data_string, ' ', - 1 ) - INSTR( data_string, ' ' ) - 2
) AS name,
SUBSTR(
data_string,
INSTR( data_string, ' ', -1 ) + 3,
INSTR( data_string, '.', -1 ) - INSTR( data_string, ' ', -1 ) - 3
) As filename,
SUBSTR(
data_string,
INSTR( data_string, '.', -1 ) + 1
) As extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|-------------|----------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
SELECT REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 1 )
AS filepath,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 2 )
AS name,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 3 )
AS filename,
REGEXP_SUBSTR( data_string, '^(.+?) (.+?) (.+)(\.(.*))?$', 1, 1, NULL, 5 )
AS extension
FROM table_name
| FILEPATH | NAME | FILENAME | EXTENSION |
|------------|---------|----------|-----------|
| C:\Desktop | JSchmoe | FileName | xml |
这就是regexp派上用场的地方。这将删除句点char后面结尾处的所有字母a-z,包括句点:
select regexp_replace(filename,'\.[a-zA-Z]+$') filename_wo_extension
from files;
如果只想删除某些扩展,请使用:
regexp_replace(filename,'\.(docx|pdf|xml)$')
要包括数字和-
以及-
,并将扩展中的最大字符数限制为10:
regexp_replace(filename,'\.[a-zA-Z0-9\-\_]{1,10}$')
此限制不会更改
文件名中的任何内容。使用.very_long_不是扩展名
,而是。末尾的long_ext
将被删除。这就是regexp派上用场的地方。这将删除句点char后面结尾处的所有字母a-z,包括句点:
select regexp_replace(filename,'\.[a-zA-Z]+$') filename_wo_extension
from files;
如果只想删除某些扩展,请使用:
regexp_replace(filename,'\.(docx|pdf|xml)$')
要包括数字和-
以及-
,并将扩展中的最大字符数限制为10:
regexp_replace(filename,'\.[a-zA-Z0-9\-\_]{1,10}$')
此限制将不会更改
文件名中的任何内容。如果扩展名为.very_long_not_
但扩展名为,则末尾的.long_ext
将被删除。假设某些文件可能没有扩展名,您也需要处理这种情况。如果您需要速度,仍然可以使用INSTR/SUBSTR完成;但是,使用正则表达式编写和维护更容易。比如:
with
inputs ( data_string ) as (
select 'C:\Desktop JSchmoe FileName.xml' from dual union all
select 'E:\CD Drive Someone Else FileName_no_extension' from dual
)
select regexp_substr(data_string, '(.*?)\s{3}', 1, 1, null, 1) as filepath,
regexp_substr(data_string, '(.*?)\s{3}', 1, 2, null, 1) as username,
regexp_substr(data_string, '(.*?\s{3}){2}(.*)(\.|$)', 1, 1, null, 2) as filename
from inputs
;
FILEPATH USERNAME FILENAME
------------ ---------------- ------------------------
C:\Desktop JSchmoe FileName
E:\CD Drive Someone Else FileName_no_extension
编辑:文件名可能包含多个点,例如“report.march2017.pdf”
。在这种情况下,只有最后一个点和它后面的内容必须去掉。要处理这种情况,必须修改第三列的搜索模式。这里有一个方法:
with
inputs ( data_string ) as (
select 'C:\Desktop JSchmoe FileName.xml' from dual union all
select 'E:\CD Drive Someone Else FileName_no_extension' from dual union all
select 'F:\SomeDrive mathguy File.dot.ext' from dual
)
select regexp_substr(data_string, '(.*?)\s{3}', 1, 1, null, 1) as filepath,
regexp_substr(data_string, '(.*?)\s{3}', 1, 2, null, 1) as username,
regexp_substr(data_string, '(.*?\s{3}){2}(.*?)(\.[^.]*)?$', 1, 1, null, 2) as filename
from inputs
;
FILEPATH USERNAME FILENAME
------------ ---------------- ------------------------
C:\Desktop JSchmoe FileName
E:\CD Drive Someone Else FileName_no_extension
F:\SomeDrive mathguy File.dot
对'(.*?\s{3}){2}(.*?(\...[^.]*)?$)搜索模式的解释
搜索模式:
匹配任意数量的字符(零个或更多),尽可能少 需要,同时仍允许匹配整个模式*?
表示一个空格\s
表示正好有三个空格\s{3}
表示两次出现(某物,尽可能短,后跟三个空格)。所以这应该把我们带到输入的第三个“部分”(.*\s{3}{2}
- 现在从模式的末尾读取:
是字符串锚点的末尾$
是一个单点字符<代码>[^.]是任何单个非点字符\。
表示:可选(如果可能)-这是问号的含义-一个点后跟零个或多个非点。这将是延伸,锚定在字符串的末端(\..[^.*])?
- 左边只有
:在第二次出现的三个空格和扩展名之间有零个或多个字符,如果有,则为字符串的结尾。这正是文件名,没有扩展名(如果有扩展名的话),它位于整个匹配模式的第二组括号中,因此我们可以在REGEXP_SUBSTR的最后一个参数中将其称为“2”(.*)
with
inputs ( data_string ) as (
select 'C:\Desktop JSchmoe FileName.xml' from dual union all
select 'E:\CD Drive Someone Else FileName_no_extension' from dual
)
select regexp_substr(data_string, '(.*?)\s{3}', 1, 1, null, 1) as filepath,
regexp_substr(data_string, '(.*?)\s{3}', 1, 2, null, 1) as username,
regexp_substr(data_string, '(.*?\s{3}){2}(.*)(\.|$)', 1, 1, null, 2) as filename
from inputs
;
FILEPATH USERNAME FILENAME
------------ ---------------- ------------------------
C:\Desktop JSchmoe FileName
E:\CD Drive Someone Else FileName_no_extension
编辑:文件名可能包含多个点,例如“report.march2017.pdf”
。在这种情况下,只有最后一个点和它后面的内容必须去掉。要处理这种情况,必须修改第三列的搜索模式。这里有一个方法:
with
inputs ( data_string ) as (
select 'C:\Desktop JSchmoe FileName.xml' from dual union all
select 'E:\CD Drive Someone Else FileName_no_extension' from dual union all
select 'F:\SomeDrive mathguy File.dot.ext' from dual
)
select regexp_substr(data_string, '(.*?)\s{3}', 1, 1, null, 1) as filepath,
regexp_substr(data_string, '(.*?)\s{3}', 1, 2, null, 1) as username,
regexp_substr(data_string, '(.*?\s{3}){2}(.*?)(\.[^.]*)?$', 1, 1, null, 2) as filename
from inputs
;
FILEPATH USERNAME FILENAME
------------ ---------------- ------------------------
C:\Desktop JSchmoe FileName
E:\CD Drive Someone Else FileName_no_extension
F:\SomeDrive mathguy File.dot
对'(.*?\s{3}){2}(.*?(\...[^.]*)?$)搜索模式的解释
搜索模式:
匹配任意数量的字符(零个或更多),尽可能少 需要,同时仍允许匹配整个模式*?
表示一个空格\s
表示正好有三个空格\s{3}
表示两次出现(某物,尽可能短,后跟三个空格)。所以这应该把我们带到输入的第三个“部分”(.*\s{3}{2}
- 现在从模式的末尾读取:
是字符串锚点的末尾$
是一个单点字符<代码>[^.]是任何单个非点字符\。
表示:可选(如果可能)-这是问号的含义-一个点后跟零个或多个非点。这将是延伸,锚定在字符串的末端(\..[^.*])?
- 左边只有
:在第二次出现的三个空格和扩展名之间有零个或多个字符,如果有,则为字符串的结尾。这正是文件名,没有扩展名(如果有扩展名的话),它位于整个匹配模式的第二组括号中,因此我们可以在REGEXP_SUBSTR的最后一个参数中将其称为“2”(.*)
'REPORT.MARCH2017.PDF'
?我希望REPORT.MARCH2017显示出来如果您的数据中确实有这样的文件名,您可能需要仔细测试各种解决方案,看看它们是否正确处理。(我相信到目前为止我发布的内容没有-我会检查。)好的-我编辑了我对韩的回答