PostgreSQL将字符串的一部分更改为大写

时间:2012-02-15 22:28:53

标签: postgresql

我在表rspec中有一个名为trace的字段。

所以现在这个领域就像“Vol3 / data / 20070204_191426_FXBS.v3a”。

我只需要查询将其更改为“Vol3 / data / 20070204_191426_FXBS.V3A”格式。

2 个答案:

答案 0 :(得分:2)

假设当前版本:

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

对于旧版本:

select substr(rspec, 1, length(rspec) - 3)||upper(substring(rspec from '...$'))
from trace

答案 1 :(得分:2)

或者,涵盖所有可能性,如

  • 可变长度的文件扩展名: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

说明:

如果字符串没有点,请使用字符串 否则,将所有内容包括在字符串中的最后一个点中 以大写形式追加最后一个点之后的所有内容。