PostgreSQL меняет часть строки в верхний регистр - PullRequest
1 голос
/ 16 февраля 2012

У меня есть поле с именем rspec в таблице trace.

Итак, пока поле выглядит как "Vol3 / data / 20070204_191426_FXBS.v3a".

Все, что мне нужно, это запрос, чтобы изменить его на формат "Vol3 / data / 20070204_191426_FXBS.V3A".

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Или, чтобы охватить все возможности, такие как

  • расширения файлов переменной длины: 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

Объясните:

Еслистрока не имеет точки, используйте строку.
В противном случае принимайте все до и включая последнюю точку в строке.
Добавляйте все после последней точки в верхнем регистре.

2 голосов
/ 16 февраля 2012

Предполагая текущую версию:

select left(rspec, - 3)||upper(right(rspec, 3))
from trace

Для более старых версий:

select substr(rspec, 1, length(rspec) - 3)||upper(substring(rspec from '...$'))
from trace
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...