заменить строку функцией split_part - PullRequest
0 голосов
/ 26 мая 2011

Я хочу заменить первое слово перед разделителем ',' на '0, первое слово')

select replace('tab,graph,map', split_part('tab,graph', ',', 1) like 'tab','0, tab')

ОШИБКА: функция замены (неизвестно, логическое, неизвестно) не существует ЛИНИЯ 1: выберите заменить («вкладка, график, карта», split_part («вкладка, график», «,», ... ^ СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам придется добавить явные приведения типов.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Функция replace заменяет все вхождения строки, поэтому вы должны убедиться, что строка для замены уникальна или использовать что-то еще. Однако regexp_replace заменяет только первое вхождение по умолчанию, поэтому вы можете использовать его; Ваш вопрос немного неясен относительно ожидаемого результата, но, возможно, это то, что вы ищете:

=> select regexp_replace('tab,graph,map', ',', '0,');
 regexp_replace 
----------------
 tab0,graph,map

Или вот этот:

=> select regexp_replace('tab,graph,map', 'tab,', '0,');
 regexp_replace 
----------------
 0,graph,map

Или, может быть, даже это:

=> select regexp_replace('tab,graph,map', 'tab,', '0,,');
 regexp_replace 
----------------
 0,,graph,map
0 голосов
/ 26 мая 2011

вам нужно привести, так как функция ожидает замены (текст, текст, текст) и не знает, как обрабатывать ваши буквенные строки, называя их неизвестными ...

cast('tab,graph,map' AS text)

также 2-й параметр, как сравнение? который возвращает логическое значение, но функция replace ожидает, что он будет разделителем.

CAST(split_part('tab,graph', ',', 1) AS text)

наконец, последний параметр (та же проблема, что и в первом)

cast('0, tab' AS text)

конечно, если вы действительно хотите добавить «0» к вашей строке, «tab, graph, map», вы можете просто сделать это ...

SELECT '0, ' || 'tab,graph,map' ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...