使用 Invantive SQL 从路径中检索文件名

Retrieve file name from path with Invantive SQL

为了将 AccountView XML 输入文件转换为 XML Auditfile Afrekensystemen(收银机),我需要生成一个没有路径的输出文件名。查询是:

select f.file_path file_path_src
,      replace(f.file_path, '.xml', '.xaa') file_path_tgt
,      xmltransform(cnt.file_contents, xsl.file_contents) xaa_contents
from   files('${rootpath}\input', '*.xml')@os f
join   read_file_text(f.file_path)@os cnt
on     1=1
join   read_file_text('${scriptpath}\convert-account-view-to-xaa.xsl')@os xsl
on     1=1

local export documents in xaa_contents to "${rootpath}\output" filename column file_path_tgt

但是,local export documents 语句要求文件名仅由基本名称和扩展名组成。当您在其中包含目录结构时,它会生成有趣的文件路径,例如 <root path>\c_\folder\....

如何从 f.file_path 中提取没有目录路径和扩展名的文件名?

使用以下查询,我现在得到一个没有目录的文件名:

select f.file_path file_path_src
,      regexp_replace(f.file_path, '^(.*[\/]|)(.*).xml$', '.xaa') file_path_tgt
,      xmltransform(cnt.file_contents, xsl.file_contents) xaa_contents
from   files('${rootpath}\input', '*.xml')@os f
join   read_file_text(f.file_path)@os cnt
on     1=1
join   read_file_text('${scriptpath}\convert-account-view-to-xaa.xsl')@os xsl
on     1=1

部分:

regexp_replace(f.file_path, '^(.*[\/]|)(.*).xml$', '.xaa')

获取文件路径,例如c:\folder\...\accountview.xml,将其分成三部分:

  • 从开始到最后找到的正斜杠或反斜杠放入 $1。
  • 在斜线之后直到出现尾随 .xml 被放入 $2.
  • 尾部 .xml 是另一部分,但在替换字符串中不可引用。

.xaa 给出文件路径作为输出:accountview.xaa.