Подтвердить что ты не робот

Преобразование всех записей в postgres в Titlecase, прописную букву первой буквы

У меня есть простая таблица в PostgreSQL, называемая ключевыми словами с простым текстовым полем с именем name. Я хочу преобразовать все имена ключевых слов в первую букву в верхнем регистре. Есть ли способ сделать это с консоли psql?

4b9b3361

Ответ 1

Существует функция initcap(), если вы имеете в виду прописную букву первого слова для каждого ключевого слова и введите строчные буквы следующих символов:

update foo
set bar = initcap(bar)

Else объединить 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

Ответ 2

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

Это дает правильный ответ (R. López Viña Tondonia Rioja White Viña) в нашей версии Postgres (9.0.7).

Ответ 3

Функция 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';

Ответ 4

@denis, дайте правильный ответ!

Но в моем случае я использую PgAdmin3, поэтому после выбора базы данных есть SQL-запрос Options, поэтому мы можем напрямую добавить в него указанный выше запрос.

У меня была таблица подкатегория_subcategory (имя таблицы), в которой я хотел изменить значения столбца, чье имя было Item_name (имя столбца), поэтому мой запрос был таким:

update subcategory_subcategory
set Item_name = initcap(Item_name)