我想在PostgreSQL SELECT查询中的字符'/'之后提取字符串。
字段名称为source_path
,表名为movies_history
。
数据示例:
source_path的值:
等等。 source_path的所有值都采用此格式
我只需要获取'file.xxx'字符串。
答案 0 :(得分:19)
如果您的情况很简单:字符串中只有一个 /
,请使用split_part()
:
SELECT split_part(source_path, '/', 2) ...
如果可以有多个 /
,并且您想要 last 之后的字符串,这是一个简单而快速的解决方案将reverse()
向后处理字符串,第一部分处理,第二部分处理reverse()
:
SELECT reverse(split_part(reverse(source_path), '/', 1)) ...
或您可以使用更通用(且更昂贵)substring()
的正则表达式:
SELECT substring(source_path, '[^/]*$') ...
说明:
[...]
..包含一个字符列表以形成一个字符类
[^...]
..如果列表以^
开头,则为反转(所有不在列表中的字符)。
*
..量词为0-n次
$
..锚定到字符串的结尾。
答案 1 :(得分:1)
您需要使用substring功能
SELECT substring('1245487/filename.mov' from '%/#"%#"%' for '#');
说明:
%/
这意味着%
一些文字,然后是/
#"%#"
每个#
是最后一部分for '#'
中定义的占位符,需要和附加"
所以你有<placeholder> % <placeholder>
并且函数将返回在两个占位符中找到的内容。在这种情况下,%
或/
之后的其余字符串
最终查询:
SELECT substring(source_path from '%/#"%#"%' for '#');
FROM movies_history