我有一个名为data的表的postgres数据库。例如,此表包含6个整数,其中3个是错误的:
data
-----------------
foo/bar/file1.txt
foo/bar/file2.txt
file3.txt
foo/bar/file4.txt
file5.txt
file6.txt
我正在寻找一种方法来剥离带有额外路径的3个文件,以使输出变为:
data
-----------------
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
SUBSTRING(文件名,50,70)
我可以选择正确的结果,但是我无法确切弄清楚如何在表中重命名它们:SELECT substring(data, 9, 100) FROM db WHERE data LIKE 'foo/bar%';
答案 0 :(得分:3)
您可能想要一个UPDATE
。另外,最好使用SUBSTRING(file_name from 'foo/bar/(.*)$')
而不是依靠字符长度。这可以帮助您仅通过更改模式而不计算长度即可重用查询。
UPDATE data SET file_name = SUBSTRING(file_name from 'foo/bar/(.*)$')
where file_name LIKE 'foo/bar%';
答案 1 :(得分:2)
您可以将值转换为数组,然后选择该数组的最后一个条目。这样,您无需在更新语句中对文件路径进行硬编码:
update the_table
set data = (string_to_array(data, '/'))[cardinality(string_to_array(data, '/'))]
where strpos(file_name , '/') > 0
答案 2 :(得分:1)
这是获取/
之后的最后一项的一种方法:
UPDATE *my_table* SET data =
(string_to_array(data, '/'))[array_length(string_to_array(data, '/'), 1)];
因此,转换为数组的第二个转换是获取具有最后一个索引的数组的大小。