我有一个带有字段、文件名的视频表,其中一些视频被分成多个部分,视频部分的起始帧号附加到文件名的末尾,以“_”分隔。
我想获得代表每个文件名的起始帧的整数,例如:
movie.avi : frame=0
movie_500.avi: frame=500
对于上面的两个文件,我可以在我的表上使用正则表达式来获取它:
SELECT coalesce(substring(filename FROM '_(\d{2,7}).avi$')::int, 0) FROM table;
但是,如何处理视频文件名末尾可能包含数字的情况。假设我有两个文件:
anothermovie_100.avi: frame = 100 (WRONG!)
anothermovie_100_500.avi: frame = 500
我上面的选择语句会给我错误的帧起始编号。我想通过查看我的表知道 anothermovie_100 的 frame=0 因为在同一个表中存在另一个文件名,其中包含 anothermovie_100 并在最后以三位数结束。
所以基本上对于具有上述四行的表,我希望我的 select 语句给我这个:
movie.avi: frame=0
movie_500.avi: frame=500
anothermovie_100.avi: frame=0
anothermovie_100_500.avi: frame=500
所以查询必须以某种方式知道文件名字符串是否不完全包含在同一个表的另一个文件名字符串中,在这种情况下,它必须返回帧 0 而不是文件名上的最后一位转换为整数。