0

嗨,我有一个如下所示的存储过程:

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

现在,它捕获最后三个字母并验证并存储在数据库列中。但是不是捕获最后三个字母,而是在点之后捕获并将文件名存储为用户定义的相同文件名的任何其他方式。提前致谢!!

4

1 回答 1

1

你可以使用reversesubstringcharindex,你会得到你需要的结果..

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)
于 2012-09-21T09:28:05.547 回答