将postgres中的所有记录转换为Titlecase,首字母大写

时间:2011-05-30 12:05:10

标签: postgresql

我在PostgreSQL中有一个简单的表,称为关键字,带有一个名为name的简单文本字段。我想以首字母大写转换所有关键字的名称。有没有办法从psql控制台做到这一点?

4 个答案:

答案 0 :(得分:52)

如果您想要将每个关键字的第一个字母大写并且小写以下字符,则有一个initcap()函数:

update foo
set bar = initcap(bar)

其他合并substring()upper()

update foo
set bar = upper(substring(bar from 1 for 1)) ||
          substring(bar from 2 for length(bar))

http://www.postgresql.org/docs/current/static/functions-string.html

答案 1 :(得分:9)

select initcap('r. lópez viña tondonia Rioja White Viña');

这确实给出了我们的Postgres版本(9.0.7)中的正确答案(R.LópezViñaTondoniaRiojaWhiteViña)。

答案 2 :(得分:1)

initcap函数在特殊字符(破折号,撇号等)之后大写字母。我只想在一个空间之后大写。

类似于丹尼斯'回答,这个函数会转换每个单词的第一个字母(用空格分隔)

CREATE OR REPLACE FUNCTION titlecase(instr varchar) RETURNS varchar AS $$
DECLARE
  strarray varchar[] := string_to_array(inStr, ' ');
  outstrarray varchar[];
  word varchar;
BEGIN
  FOREACH word IN ARRAY strarray
  LOOP
    outstrarray := array_append(outstrarray, (upper(left(word,1))::varchar || 
lower(right(word,-1))::varchar)::varchar);
  END LOOP;
  RETURN array_to_string(outstrarray,' ','');
END;
$$ LANGUAGE 'plpgsql';

答案 3 :(得分:0)

@denis,给出正确答案!

但在我的情况下我使用的是PgAdmin3,所以选择数据库后会有SQL查询选项,所以我们可以直接在其中添加上述查询。

我有一个名为subcategory_subcategory(表名)的表,我想更改名称为Item_name(列名)的列值,所以我的查询就像这样

B