查找字符串中字符的最后位置



我需要复制行,但我也需要,改变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}.')

最新更新