Или, чтобы охватить все возможности, такие как
- расширения файлов переменной длины:
abc123.jpeg
- без расширения файлов вообще:
abc123
- точкакак последний символ:
abc123.
- несколько точек:
abc.123.jpg
SELECT CASE WHEN rspec ~~ '%.%'
THEN substring(rspec, E'^.*\\.')
|| upper(substring(rspec , E'([^.]*)$'))
ELSE rspec
END AS rspec
FROM (VALUES
('abc123.jpeg')
, ('abc123')
, ('abc123.')
, ('abc.123.jpg')
) ASx(rspec); -- testcases
Объясните:
Еслистрока не имеет точки, используйте строку.
В противном случае принимайте все до и включая последнюю точку в строке.
Добавляйте все после последней точки в верхнем регистре.