У меня есть простая таблица в PostgreSQL, называемая ключевыми словами с простым текстовым полем с именем name. Я хочу преобразовать все имена ключевых слов в первую букву в верхнем регистре. Есть ли способ сделать это с консоли psql?
Преобразование всех записей в postgres в Titlecase, прописную букву первой буквы
Ответ 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)