|
|
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Уважаемый All, скажите получаю строку подобным образом select (field1 || field2 || ...............|| fieldN ) as LargeString проблема в том что результирующая строка получается более 255 символов, и все что дальше 255 символа то отбрасывается, что есть плохо. Вопрос как побороть? Вариант с ХП типа create procedure some_proc(....) returning text также не проходит :( Заранее спасибо. Использую Informix 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2004, 19:28 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Причем интересная особенность, если сцеплять заранее определенные контстанты ' строка 200 символов '||' еще строка 200 символов ' то всё в порядке, НО как только брать хоть одну строку из БД то сразу резельтирующая строка урезеется до 255 символов :((((((( .Блин совсем крыша едет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 10:28 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Напиши хранимую процедуру и не парься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 12:04 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
С хранимкой тоже все не так просто: пишу 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 ты поборол, скажи как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 13:08 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Попробуй использовать trim(col1) || trim(col2). А вообще-то я проверил в 9.4 - все нормально возвращается, неурезанным. В таком вот аксепте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 19:28 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Пробовал и так- результата нет у меня informix 7.1 . Очевидно дело в сервере.......жаль... ( в предыдущем постинге конечно select (sub1||sub2....||subN) as mybigstring into out , опечатка ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 10:32 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Не уверен, что сие пройдет на 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). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2004, 19:00 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
можно использовать replace например при сборе строки в ее хвост всегда добавлять спец символ, например $, а затем делать replace '$' на нужную строку. Разумеется в строке не должно быть спец символов ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2004, 15:41 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
ВыбегаллоПопробуй использовать 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, особенно если знать содержимое строк. Какие комментарии ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2005, 17:26 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
> select (sub1||sub2....||subN) as mybigstring Наверное у тебя какое-то поле (или все) имеют тип varchar, поэтому и результат к этому типу приводится. Я попробовал с char - всё замечательно конкатенируется (получил строку длинной в 1200 символов - 4x300). Так что... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2005, 20:34 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
> Попробуй использовать trim(col1) || trim(col2) Во как раз trim-то и возвращает varchar. Надо substr использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2005, 20:35 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
> define v1 varchar(255); > define out references text; > let out=v1 В процедуре blob можно либо прочитать из базы, либо записать туда. Это всё. Очень ограниченные возможности. Для обработки blobов (показ видиков или прослушивание фонограмм) надо писать клиентское приложение, которое знает, что там за байты такие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2005, 20:40 |
|
||
|
Получить сцепление строк более 255 символов?
|
|||
|---|---|---|---|
|
#18+
Код: 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. best regards, win-kim ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:58 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=32487546&tid=1608927]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 342ms |

| 0 / 0 |
