在'/'字符后获取字符串

时间:2015-09-03 17:20:30

标签: sql regex postgresql pattern-matching

我想在PostgreSQL SELECT查询中的字符'/'之后提取字符串。

字段名称为source_path,表名为movies_history

数据示例:

source_path的值:

  • 184738 / file1.mov
  • 194839 / file2.mov
  • 183940 / file3.mxf
  • 118942 / file4.mp4

等等。 source_path的所有值都采用此格式

  • RANDOM_NUMBER / filename.xxx

我只需要获取'file.xxx'字符串。

2 个答案:

答案 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次 $ ..锚定到字符串的结尾。

SQL Fiddle demo

答案 1 :(得分:1)

您需要使用substring功能

SQL FIDDLE

SELECT substring('1245487/filename.mov' from '%/#"%#"%' for '#');

说明:

%/

这意味着%一些文字,然后是/

#"%#"

每个#是最后一部分for '#'中定义的占位符,需要和附加"

所以你有<placeholder> % <placeholder>并且函数将返回在两个占位符中找到的内容。在这种情况下,%/之后的其余字符串

最终查询:

 SELECT substring(source_path from '%/#"%#"%' for '#');
 FROM movies_history