问题描述
||
我在PostgreSQL中有一个名为关键字的简单表,其中有一个名为name的简单文本字段。我想将首字母大写转换为关键字的所有名称。有没有办法从psql控制台执行此操作?
解决方法
如果您要将每个关键字的首字母大写并将以下字符小写,则有一个
initcap()
函数:
update foo
set bar = initcap(bar)
其他结合combine2ѭ和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
, select initcap(\'r. lópez viña tondonia Rioja White Viña\');
在我们的Postgres版本(9.0.7)中,这确实给出了正确的答案(R.LópezViñaTondonia Rioja WhiteViña)。
, initcap函数在特殊字符(破折号,撇号等)之后大写字母。我只想在空格后大写。
与Denis的答案类似,此函数将转换每个单词的第一个字母(以空格分隔)
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\';
, @denis,给出正确答案!
但在我的情况下,我使用PgAdmin3,因此在选择数据库之后,将使用SQL查询Options,因此我们可以在其中直接添加上述查询。
我有一个名为subcategory_subcategory(表的名称)的表,因为我想更改名称为Item_name(column的名称)的列值,所以我的查询就像这样
update subcategory_subcategory
set Item_name = initcap(Item_name)