Sql 查询postgres中的不同子字符串

Sql 查询postgres中的不同子字符串,sql,postgresql,Sql,Postgresql,我继承了一个包含120k行(包括文件名)的表。在整个文件名中复制了大约12000个子字符串。每个文件名都是根据奇怪的命名约定命名的,但都基于相同的子字符串。 例如,一个可能被称为“apple-5pxl.mov”,另一个可能是“c-5pxl.mov”,还有一个可能是“76_5pxl.mov”……而其他可能是“apple-234x.mov”和“76_234x.mov” 如何返回不同子字符串数的计数和列表?在上面的示例中,将有2个(5xpl.mov和234x.mov)我认为可以将substring()

我继承了一个包含120k行(包括文件名)的表。在整个文件名中复制了大约12000个子字符串。每个文件名都是根据奇怪的命名约定命名的,但都基于相同的子字符串。 例如,一个可能被称为“apple-5pxl.mov”,另一个可能是“c-5pxl.mov”,还有一个可能是“76_5pxl.mov”……而其他可能是“apple-234x.mov”和“76_234x.mov”


如何返回不同子字符串数的计数和列表?在上面的示例中,将有2个(5xpl.mov和234x.mov)

我认为可以将
substring()
与模式参数一起使用:

select substring(filename from '[^-_]*$') as pat, count(*)
from t
group by pat;
该模式似乎是字符串末尾由连字符或下划线分隔的任何内容