如何从 PostgreSQL 中的文件名获取文件扩展名?
How to get file extension from filename in PostgreSQL?
使用 PostgreSQL 9.3。
有一列包含这样的文件名值:
qwerty.swf
some.image.jpg
some.other.image.jpg
此列也允许空值。
如何从 sql 查询中的这一列获取文件扩展名?
使用 regexp
执行此操作。
select regexp_matches(filename,'\.(\w+)$')
from tablename
where filename ~ '\.' --check if filename has atleast 1 . character in it
或 substring
、reverse
和 strpos
的组合。
select reverse(substring(reverse(filename) from 1 for strpos(reverse(filename),'.')-1))
from tablename
where filename ~ '\.' --check if filename has atleast 1 . character in it
尝试:
with mytable as (
select unnest(string_to_array($$qwerty.swf
some.image.jpg
some.other.image.jpg
test
$$,E'\n')) filename)
select filename,substring(filename from '\.([^\.]*)$')
from mytable
如果你想从 URL 中提取文件的扩展名,事情会稍微困难一些,因为 URL 例如 https://whatever.com
可以用于文件描述符,导致 com
作为扩展名。
这是我的方法。
create or replace function url_ext (s varchar)
returns varchar
immutable language sql as $$
select substring(s from '^http[s]?:\/\/.*\/.*\.([A-z0-9_-]*)$');
$$;
这些是一些测试:
select
url_ext('http://whatever.com'),
url_ext('https://whatever.com'),
url_ext('https://whatever.com/something/more/file.pdf'),
url_ext('https://whatever.com/file.pdf'),
url_ext('https://whatever.com/something/more/slug');
url_ext|url_ext|url_ext|url_ext|url_ext|
-------+-------+-------+-------+-------+
| |pdf |pdf | |
使用 PostgreSQL 9.3。 有一列包含这样的文件名值:
qwerty.swf
some.image.jpg
some.other.image.jpg
此列也允许空值。
如何从 sql 查询中的这一列获取文件扩展名?
使用 regexp
执行此操作。
select regexp_matches(filename,'\.(\w+)$')
from tablename
where filename ~ '\.' --check if filename has atleast 1 . character in it
或 substring
、reverse
和 strpos
的组合。
select reverse(substring(reverse(filename) from 1 for strpos(reverse(filename),'.')-1))
from tablename
where filename ~ '\.' --check if filename has atleast 1 . character in it
尝试:
with mytable as (
select unnest(string_to_array($$qwerty.swf
some.image.jpg
some.other.image.jpg
test
$$,E'\n')) filename)
select filename,substring(filename from '\.([^\.]*)$')
from mytable
如果你想从 URL 中提取文件的扩展名,事情会稍微困难一些,因为 URL 例如 https://whatever.com
可以用于文件描述符,导致 com
作为扩展名。
这是我的方法。
create or replace function url_ext (s varchar)
returns varchar
immutable language sql as $$
select substring(s from '^http[s]?:\/\/.*\/.*\.([A-z0-9_-]*)$');
$$;
这些是一些测试:
select
url_ext('http://whatever.com'),
url_ext('https://whatever.com'),
url_ext('https://whatever.com/something/more/file.pdf'),
url_ext('https://whatever.com/file.pdf'),
url_ext('https://whatever.com/something/more/slug');
url_ext|url_ext|url_ext|url_ext|url_ext|
-------+-------+-------+-------+-------+
| |pdf |pdf | |