Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, коллеги - есть простенький вопрос! Пусть дана таблица структуры Create table test_t (ID integer, NAME varchar(50)) Пусть загоняем данные: insert into test_t (ID, NAME) values (1, ',брат') ; insert into test_t (ID, NAME) values (2, ',сестра') ; Нужно получить строку = 'брат,сестра'. Есть ли какая-нибудь функция которая это автоматом сможет сделать. Посмотрел RPAD; CONCAT. Или же писать курсор, который будет конкатенировать значения столбцов в одну строку. Версия СУБД (9.7) Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 09:27 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
medoed, Здравствуйте. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 09:53 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Спасибо, Марк - вкуриваю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:09 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Правильно я понимаю, что данная функция может максимум строку из 4000 за раз символов возвращать? А если мне надо например 100 000 символов сконкатенировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:14 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
medoedПравильно я понимаю, что данная функция может максимум строку из 4000 за раз символов возвращать? Нет, максимум - 32K. Там же написано: Код: plaintext 1. If the data type of string-expression is GRAPHIC(n or VARGRAPHIC(n), the data type of result is VARGRAPHIC( MAX(2000, n)) The result data type can exceed VARCHAR(4000) or VARGRAPHIC(2000) if a derived size is used to determine the size of the result, to a maximum of 32 KB if WITHIN GROUP is specified. The following example successfully yields a return data type of VARCHAR(10000): LISTAGG(CAST(NAME AS VARCHAR(10000)), ',') medoedА если мне надо например 100 000 символов сконкатенировать? Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:31 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Да спасибо, уже нашёл грустно! Было бы как в MSSQL , было бы ограничение в Varchar (max) , там 2 ГБ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:33 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
medoedПравильно я понимаю, что данная функция может максимум строку из 4000 за раз символов возвращать? А если мне надо например 100 000 символов сконкатенировать? 4000 - это не ограничение функции, это ограничение типа данных VARCHAR. А елс инадо больше, то писать самодельную функцию и собирать результат в CLOB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:35 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
>>Добрый Э - Эх, Дык это понятно, но в MSSQL 2005 и выше - ограничение на varchar (Varchar(max) )- 2 ГБ. И не нужен стал CLOB - там где можно обойтись varchar. Марк - вы не можете VARCHAR(MAX) заказать у разработчиков DB2 Марку отдельное спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 10:52 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
medoedМарк - вы не можете VARCHAR(MAX) заказать у разработчиков DB2 Насколько я знаю, в MSSQL varchar(n) и varchar(max) - разные типы данных. Считайте, что в DB2 тип данных: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 11:34 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinmedoedМарк - вы не можете VARCHAR(MAX) заказать у разработчиков DB2 Насколько я знаю, в MSSQL varchar(n) и varchar(max) - разные типы данных. Считайте, что в DB2 тип данных: Код: plaintext MSSQL будет работать такой скрипт: declare @str_temp varchar(200) = 'Привет медвед!' declare @str_all varchar(max) = '' set @str_all = @str_all + @str_temp print @str_all Тоесть можно складывать эти разные как вы говорите типы без конвертации + я могу varchar(max) передавать в любую функцию и процедуру, как вариант , предварительно закатав в них XML для парсинга например. Не уверен , что всё это умеет DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 12:18 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
MSSQLMSSQL будет работать такой скрипт: declare @str_temp varchar(200) = 'Привет медвед!' declare @str_all varchar(max) = '' set @str_all = @str_all + @str_temp print @str_all Тоесть можно складывать эти разные как вы говорите типы без конвертации + я могу varchar(max) передавать в любую функцию и процедуру, как вариант , предварительно закатав в них XML для парсинга например. Не уверен , что всё это умеет DB2. Разные типы - это не значит, что их нельзя использовать вместе. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Неужели сложно проверить? То же самое с передачей в функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 13:08 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein+ MSSQLMSSQL будет работать такой скрипт: declare @str_temp varchar(200) = 'Привет медвед!' declare @str_all varchar(max) = '' set @str_all = @str_all + @str_temp print @str_all Тоесть можно складывать эти разные как вы говорите типы без конвертации + я могу varchar(max) передавать в любую функцию и процедуру, как вариант , предварительно закатав в них XML для парсинга например. Не уверен , что всё это умеет DB2. Разные типы - это не значит, что их нельзя использовать вместе. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Неужели сложно проверить? То же самое с передачей в функции. Да наверное можно тему закрывать - у меня не запускается ваш скрипт, наверное не все опции на серваке подключены. Я говорил другое, Вы просто меня не захотели услышать! Если бы функция listagg реализовывалась на MSSQL, то не было бы ограничения в 32 КБ , а было бы ограничение в varchar(max) ибо это для MSSQL родственные типы. Вообщем то и всё! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 13:38 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
medoed, Если бы у бабушки... Утверждение эквивалентно тому, что если бы функция LISTAGG(...) реализовывалась в MS SQL, то тип результата был бы Код: plaintext Может да, а может нет. Мне кажется желание DB2 разработчиков оставить тип результата в пространстве типов VARCHAR() вполне естественно. VARCHAR'ы обрабатываются по-другому. Совсем не так как CLOB (они, как и другие common типы, влезают в страницу памяти/табличного пространства и работа с ними идёт в буффер-пулах). Многие операции как с самими объектами типа VARCHAR так и с таблицами, их содержащими, идут значительно быстрее, чем с СLOB (или deprecated LONG VARCHAR) объектами. То же самое то касается и MS SQL: http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/] http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/ http://richardlees.blogspot.ru/2010/07/varcharmax-performance-in-sql-server.html] http://richardlees.blogspot.ru/2010/07/varcharmax-performance-in-sql-server.html http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/4de94284-cfe2-4a47-9863-8a2bbce4fb07/] http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/4de94284-cfe2-4a47-9863-8a2bbce4fb07/ Только там "обыкновенный" varchar - 8000, а не 32K Ну и по крайней мере Вам представили два варианта хоть с VARCHAR результатом, хоть с CLOB. Используйте, что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 18:20 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
PS С LOB'ами по возможности нужно работать вообще только LOB LOCATOR'ами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 18:28 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
>>CawaSPb, 1. Я не говорил, что Varchar(max) - это тип данных который стоит использовать везде и всюду. То что он медленный и много памяти жрёт - это однозначно! Его надо использовать, только тогда - когда деваться некуда. Насколько я помню - на такие поля даже индексы не накатываются! Но для гипер больших данных без них не удобно. 2. То что есть функция listagg - это классно , насколько я помню в MSSQL это делается через XML. Я лишь говорил, что если бы функция работала с varchar(MAX), ну вот приспичило 100 000 идентификатор через запятую запихнуть в переменную - было бы классно. Причем varchar (max) - просто удобен для понимания. То что это невозможно для больших объемов в DB2 и надо использовать тот же XML запрос для CLOB в данной функции - тоже понятно. P.S. Меня недавно в DB2 порадовала тем, что счетчик можно и через identity делать, как в MSSQL , так и через sequence, как в Oracle. Вот за это разработчикам DB2 уважуха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 21:45 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinmedoed, Здравствуйте. Код: plaintext 1. 2. 3. 4. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 17:35 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Semen PopovЗдравствуйте, Mark Barinstein! А для версии 8.2 не подскажете решение? LISTAGG, к сожалению Код: plaintext Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 17:56 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinЗдравствуйте. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Mark Barinstein, большое спасибо. Мда-а-а... Что-то так наворочено. Не сочтите за наглость, а не могли бы дать скрипт в отношении таблицы TAB1 (TAB1_ID, FRN_ID, NAM) с группировкой по FRN_ID? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 08:47 |
|
||
|
Собрать из столбца строку
|
|||
|---|---|---|---|
|
#18+
Semen Popov, как-то так Код: sql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 12:00 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38191889&tid=1601492]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 163ms |

| 0 / 0 |
