如何在PostgreSQL中从文件名获取文件扩展名?

kos*_*ych 2 sql postgresql postgresql-9.3

使用PostgreSQL 9.3。有一列具有类似文件名的值:

qwerty.swf
some.image.jpg
some.other.image.jpg 
Run Code Online (Sandbox Code Playgroud)

此列还允许使用空值。

如何从SQL查询的此列中获取文件扩展名?

Vam*_*ala 6

使用regexp要做到这一点。

select regexp_matches(filename,'\.(\w+)$')
from tablename
where filename ~ '\.' --check if filename has atleast 1 . character in it
Run Code Online (Sandbox Code Playgroud)

Sample fiddle

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
Run Code Online (Sandbox Code Playgroud)

  • regexp_matches 删除任何行是不正确的。该函数甚至没有传递表名,更不用说要删除的记录的主键。如果要删除行,请使用 DELETE 语句或 TRUNCATE 语句。 (3认同)

Rém*_*ron 5

尝试:

    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
Run Code Online (Sandbox Code Playgroud)