我需要复制行,但我也需要,改变path
字段:
旧path
值= '<src_dir>'/workspace_id/project_id/file_id.file_format
new path
value = '<src_dir>'/workspace_id/new_project_id/new_file_id.file_format
我试图找到点的位置和计数从它两个uid长度+斜杠,并把那里有新的斜杠分隔的项目和文件id
overlay(path, placing '{<new_project_id>}/{<new_file_id>}' from (position('.' in path)-(36 * 2 + 1) for (36 * 2 + 1)))
但是如果src_dir
在其名称中包含一个点,则该点的位置将被占用。有没有办法取最后一个点的位置?
您可以将REVERSE()
函数与LENGTH()
函数一起使用,例如
SELECT LENGTH(path) - POSITION( '.' IN REVERSE(path)) + 1
FROM t
在这种情况下,最后一个点将被定位为第一个
好吧,我不是专业的regexp,它可以它可以更漂亮,但它工作:
regexp_replace(path, '([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/(([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}).)', '{new_project_id}/{new_file_id}.')