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