我有一个如下所示的存储过程:
ALTER PROCEDURE "DBA"."my_enr_test"(in file_name char(255), in uploaded_by char(100))
/* RESULT( column_name column_type, ... ) */
BEGIN
declare filepath char(100);
declare validatefile char(255);
// declare rc bit;
set filepath = file_name;
set Filename = Substr(FilePath, PatIndex('.', FilePath),3);
if filepath <> 'xml' and filepath <> 'csv' then
set validatefile = 'Invalid File Format'
else
set validatefile = 'Valid'
end if;
INSERT INTO DBA.pro_import_paths(filename, filevalidate, updated_by) values(filename, validatefile, uploaded_by);
// RETURN rc;
END
Noow,它捕获最后三个字母并验证并存储在数据库列中。但是不是捕获最后三个字母,而是在点之后捕获任何其他方式并将文件名存储为用户定义的文件名。在此先感谢!!
答案 0 :(得分:1)
您可以使用反向,子字符串, charindex ,然后获得所需的结果。
SET Filename = SELECT reverse(substring(reverse('FilePath.exe'),1,
charindex('.', reverse('FilePath.exe'))))
对于多个“。”存在于您可以使用的文件名中:
SET Filename = SELECT
SUBSTRING('FilePath.com.exe',
LEN('FilePath.com.exe') - (CHARINDEX('.', reverse('FilePath.com.exe'))-2), 8000)