2016-11-30 1 views
1

Для преобразования входных файлов XML AccountView в XML-файл аудита Afrekensystemen (кассовые реестры) Мне нужно сгенерировать имя выходного файла без пути. Запрос:Получить имя файла из пути с помощью Invantive SQL

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?

ответ

2

Используя следующий запрос теперь я получаю имя файла без каталога:

select f.file_path file_path_src 
,  regexp_replace(f.file_path, '^(.*[\\/]|)(.*).xml$', '$2.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$', '$2.xaa') 

принимает путь к файлу, такую ​​как c:\folder\...\accountview.xml, делит его на три части:

  • С начала и до последней найденной вперед или назад слэш помещается в $ 1.
  • После косой черты до появления заднего .xml помещается в $ 2.
  • Конец .xml - это еще одна часть, но не ссылочная в строку замены.

$2.xaa дает мне путь к файлу как выход: accountview.xaa.