Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Получить сцепление строк более 255 символов? / 13 сообщений из 13, страница 1 из 1
19.04.2004, 19:28
    #32486933
DmVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Уважаемый All, скажите
получаю строку подобным образом
select
(field1 || field2 || ...............|| fieldN ) as LargeString

проблема в том что результирующая строка получается более 255 символов, и
все что дальше 255 символа то отбрасывается, что есть плохо. Вопрос как побороть?

Вариант с ХП типа
create procedure some_proc(....) returning text
также не проходит :(
Заранее спасибо.
Использую Informix 7.
...
Рейтинг: 0 / 0
20.04.2004, 10:28
    #32487318
DmVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Причем интересная особенность, если сцеплять заранее определенные контстанты ' строка 200 символов '||' еще строка 200 символов ' то всё в порядке, НО как только брать хоть одну строку из БД то сразу резельтирующая строка урезеется до 255 символов :(((((((
.Блин совсем крыша едет
...
Рейтинг: 0 / 0
20.04.2004, 12:04
    #32487546
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Напиши хранимую процедуру и не парься.
...
Рейтинг: 0 / 0
20.04.2004, 13:08
    #32487680
DmVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
С хранимкой тоже все не так просто:
пишу create procedure ...(...) returning references text
......
define v1 varchar(255);
......
define out references text;

далее если так:
select sub1,sub2....subn into v1,v2,....subn
let out=v1||v2....||vn - то ошибка при выполнении типа 'неверная попытка конвертить text/blob тип '

елси делать так
select (sub1,sub2....,subN) as mybigstring into out - то здесь таже ошибка

return out

cpr ты поборол, скажи как?
...
Рейтинг: 0 / 0
23.04.2004, 19:28
    #32495028
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Попробуй использовать trim(col1) || trim(col2).
А вообще-то я проверил в 9.4 - все нормально возвращается, неурезанным.

В таком вот аксепте
...
Рейтинг: 0 / 0
27.04.2004, 10:32
    #32498011
DmVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Пробовал и так- результата нет
у меня informix 7.1 .
Очевидно дело в сервере.......жаль...
( в предыдущем постинге конечно select (sub1||sub2....||subN) as mybigstring into out , опечатка )
...
Рейтинг: 0 / 0
27.05.2004, 19:00
    #32537516
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Не уверен, что сие пройдет на 7-ке, но на 9-ке можно так:
select comment::char(800)||comment::char(800)||comment::char(800)||comment::char(800)
from table

На 7-ке, скорее всего прийдется сделать свою функцию, типа my_char(varchar(255)) returning char(800).
...
Рейтинг: 0 / 0
07.06.2004, 15:41
    #32550989
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
можно использовать replace
например при сборе строки в ее хвост всегда добавлять спец символ, например $, а затем делать replace '$' на нужную строку. Разумеется в строке не должно быть спец символов ;-)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.08.2005, 17:26
    #33241793
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
ВыбегаллоПопробуй использовать trim(col1) || trim(col2).
А вообще-то я проверил в 9.4 - все нормально возвращается, неурезанным.

у одного из программистов возникла подобная проблема, поэтому пришлось вернуться к этому вопросу еще раз.
К сожалению, даже в 9.4 вопрос не решается, причем данные не просто урезаются, как здесь писал автор, а возникает ошибка
881: Resulting string length must be less than or equal to 255.
Для обсуждения предлагаю готовый для выполнения пример test_trim_vchar.sql
=====================
begin work;
create table _tst (code varchar(20,0), name varchar(254,0));
insert into _tst(code,name) values('10000','123456789012345678901234567890_total_40b');
insert into _tst(code,name) values('20000','123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345');
insert into _tst(code,name) values('30000',' --30_blanks_before_wwwwwww___________________________wwwwwwwwwwwwwwwwwwwwwwwasdfghjkl_asdfghjkl_asdfghjkl_asdfghjkl_asdfghjkl!!!--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11@#$%REGDFSDFSDFGSDFGSDFGSDFGaaaaaaaaaaaaaaaaaaa');
select code,name as fjoin from _tst;
--1
--select code||name as fjoin from _tst where code ='10000'; --работает
--select code||name as fjoin from _tst where code ='20000'; -- не работает
-- (ошибка SQL) 881: Resulting string length must be less than or equal to 255
--select code||name as fjoin from _tst where code ='30000'; -- не работает (ошибка SQL 881)
--select trim(code)||trim(name) as fjoin from _tst where code ='20000'; -- не работает (ошибка SQL 881)
--select trim(code)||trim(name) as fjoin from _tst where code ='30000'; --работает
--2
--select substr(code||name,0,255) as fjoin from _tst where code ='10000'; --работает
--select substr(code||name,0,255) as fjoin from _tst where code ='30000'; -- не работает (ошибка SQL 881)
--3
--select substr(trim(code)||name,0,255) as fjoin from _tst where code ='10000'; --работает
--select substr(trim(code)||name,0,255) as fjoin from _tst where code ='30000';-- не работает (ошибка SQL 881)
--4
--select substr(code||trim(name),0,255) as fjoin from _tst where code ='10000'; --работает
--select substr(code||trim(name),0,255) as fjoin from _tst where code ='30000';--работает
--5
--select code||substr(name,0,235) as fjoin from _tst where code ='30000'; --работает
--6
--select substr(name||code,0,255) as fjoin from _tst where code ='30000'; -- не работает (ошибка SQL 881)
--select substr(trim(name)||code,0,255) as fjoin from _tst where code ='20000';-- не работает (ошибка SQL 881)
--select substr(trim(name)||code,0,255) as fjoin from _tst where code ='30000';--работает
--7
--select code::char(400)||name::char(400) as fjoin from _tst where code ='30000';--работает, но результат длиной 800
--select REPLACE(code||'$','$',name) as fjoin from _tst where code ='30000'; --работает
--rollback;
================
Похоже, что более всего годится вариант с REPLACE, особенно если знать содержимое строк.
Какие комментарии ?
...
Рейтинг: 0 / 0
30.08.2005, 20:34
    #33242160
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
> select (sub1||sub2....||subN) as mybigstring
Наверное у тебя какое-то поле (или все) имеют тип varchar, поэтому и результат к этому типу приводится. Я попробовал с char - всё замечательно конкатенируется (получил строку длинной в 1200 символов - 4x300). Так что...
...
Рейтинг: 0 / 0
30.08.2005, 20:35
    #33242163
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
> Попробуй использовать trim(col1) || trim(col2)
Во как раз trim-то и возвращает varchar. Надо substr использовать.
...
Рейтинг: 0 / 0
30.08.2005, 20:40
    #33242166
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
> define v1 varchar(255);
> define out references text;
> let out=v1
В процедуре blob можно либо прочитать из базы, либо записать туда. Это всё. Очень ограниченные возможности. Для обработки blobов (показ видиков или прослушивание фонограмм) надо писать клиентское приложение, которое знает, что там за байты такие.
...
Рейтинг: 0 / 0
05.09.2005, 11:58
    #33251233
win-kim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить сцепление строк более 255 символов?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Create function myconcat(st1 char( 5000 ),st2 char( 5000 ))
--Функция выполняет конкантенацию двух строк, длина которых может быть больше 255
-- for IDS 9.4
  Returning char( 10000 );
  define st_0 char( 10000 );
  define st_3 char( 10000 );
  define i, k,c1, c2 int;

  If st1 is null then let st1 =''; end if;
  If st2 is null then let st2 =''; end if;

  let c1=length(st1);
  let c2=length(st2);
  let st_0=substr(st1, 1 ,c1)||' '||substr(st2, 1 ,c2);

For k= 1  to  2   
  let st_3=st_0;
  For i= 1  to length(st_3)
     If Substr(st_3,i, 2 )='  ' then 
       let st_0=substr(st_3, 1 ,i)||substr(st_3,i+ 2 ,length(st_3));
       EXIT FOR;
      End if;
    End for;
  End for;
  Return st_0;
End function;

best regards,
win-kim
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Получить сцепление строк более 255 символов? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]