LINUX.ORG.RU

Постгрес, головоломка для DBAs


0

0

есть данные у которых длина > 40 chars

select clinic_name, length(clinic_name) from clinics where (select length(clinic_name) > 40);

1АААА ... АААА ББ40БББ ВВВВВВ

1АААА ... АААА,ББ40БББ ВВВВВВ

Надо разбить этот рекорд на 2, но с умом, не просто резануть на 40-вом. (типа: wrapping 40 chars)

anonymous

Что значит "разбить ... с умом", и почему это нужно сделать на стороне сервера?

anonymous
()
Ответ на: комментарий от anonymous

есть данные длина которых > 40 chars. Эту инфу надо другим передать в csv формате, у них максимальная длина 40 chars.

Разбить с умом, это когда не просто резануть первые 40 chars, а резануть целые слова =< 40 chars. Остальне должно уйтти на 2-е поле.

anonymous
()
Ответ на: комментарий от anonymous

> а резануть целые слова =< 40 chars. Остальне должно уйтти на 2-е поле.

"Остальне" "уйтти" .... ужос %)

create or replace function wrap_text_by_words(IN text_string text, IN wrap_col int, IN wrap_char text, OUT _wraped text)
AS $body$

	use Text::Wrap;

	my $text_string = $_[0];
	my $wrap_col = $_[1];
	my $wrap_char = $_[2];

	$Text::Wrap::columns = $wrap_col;
	$Text::Wrap::separator = $wrap_char;

	return wrap('', '', $text_string);

$body$
	language plperlu;

seb=> select '"' || wrap_text_by_words('this is very very very very long long line of text', 15, '\n') || '"';
                       ?column?
------------------------------------------------------
 "this is very
very very very
long long line
of text"
(1 запись)

Время: 5,769 мс
seb=> select '"' || wrap_text_by_words('this is very very very very long long line of text', 15, ',') || '"';
                       ?column?
------------------------------------------------------
 "this is very,very very very,long long line,of text"
(1 запись)

Время: 0,715 мс

Eshkin_kot ★★
()
Ответ на: комментарий от Eshkin_kot

Eshkin_Kot,

Спасиб. Только надо разбить на 2, а не просто "wrap" сделать. Почему на 2, так-как у меня максимум 50 chars, ну а у клиента максимум 40 chars.

seb=> select '"' || wrap_text_by_words('this is very very very very long long line of text', 15, '\n') || '"'; ?column? ------------------------------------------------------ "this is very","long long line" (1 запись)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.