|
|
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
Уважаемые гуру, подскажите, плз. Задача - разбить в UDF строку ЛЮБОЙ длинны по разделителям и вернуть результат в виде таблицы. Я написал UDF, которая принимала строку и прекрасно справлялась до тех пор, пока строка не превышала 8000 символов. С text трахался, и ни хрена не получилось(( Подсобите, пожалуйста. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 11:42:31 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 11:51:17 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 11:54:41 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2Glory. Трабла в том, что я не могу использовать sp_xml_preparedocument внутри фции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 12:16:37 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
Да, не можете. Придется выбирать UDF vs PROCEDURE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 12:31:18 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2Lexis - типа такого у меня и есть, только в UDF. и проблему длинных строк это, к сожалению, не решает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 12:34:39 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
1. Если элементы строк могут превышать 8000 байт, т.е. выходная таблица будет содержать поле типа text (ntext) для них, то UDF написать нельзя, потому что - если попытаться использовать substring, то получим облом - параметр length не может превышать 8000 - если формировать элементы посимвольно, то нужно использовать textptr, а это в UDF не получится 2. Если вся строка может быть больше 8000, а элементы - нет, то, возможно , и получится. 3. Почему бы не попытаться прогнать через bcp, указав свой разделитель как разделитель строк , а не столбцов ? Как раз в таблицу все и сольется. Если второй вариант вас устраивает, то можно продолжить :-) Хотя третий мне кажется более привлекательным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 13:00:28 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise: Да, второй вариант меня устраивает - жлементы явно не будут больше 8000. А что насчет bcp? я с ним никогда не работал(( у меня задача - из ASP передаю в SQL ДЛИННУЮ строку идентификаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 13:07:30 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
у меня уже написана куча кода, типа такого: Код: plaintext 1. а вот fSplit: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Во время испытания на реальных данных выяснилось, что 8000 не хватает((. Код менять в куче мест и снова отлаживать - не прет совершенно, хотелось бы поменять UDF. Прокатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 13:15:18 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
Не, bcp в функции все равно не прокатит... Пардон, переклинило на sp обычные. Просто показалось, что это самый простой и универсальный вариант. Ладно, займемся вторым :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 13:19:55 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
Например, так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Или так: Код: 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. Сами посмотрите, что производительнее. Кстати, а вы уверены, что @delimiter char(1) - это хорошо? В вашем примере делимитер явно двухсимвольный :-) И еще - ваш пример неправильно сработал на тесте select item from dbo.fSplit('012.456567.df.rt', '.'). Лень разбираться, что там неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 13:58:43 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise - СПАСИБО ОФИГЕННОЕ! Сейчас попробую! delimer char(1) - это, конечно, да.) а с ошибкой гляну. Спасибо еще раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 14:02:18 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
Если делимитер не односимвольный, то функции надо менять, чтобы это учитывать, в данном виде работать не будут. Думаю, и без меня справитесь ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 14:19:16 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2GreenSunrise - с меня пиво! куда проставлять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 14:26:21 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
То есть помогло? Я пиво не пью. Обойдемся "спасибом" :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 14:29:56 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#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. "быстрость" заметна только когда строка кодов больше 8000. На 16000 выигрышь в пару секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 14:58:09 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2 GreenSunrise если попытаться использовать substring, то получим облом - параметр length не может превышать 8000 ой как я Вас еще обрадую: начиная с 7-й версии - может 2 brams а ведь не обязательно передавать сам text, можно же передавать ключ записи, где есть это поле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 15:46:51 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2Slava - спасибо, будем ускоряться! 2SergSuper - дело в том, что text берется НЕ из таблицы, а пихать его туда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 15:55:34 |
|
||
|
разбить строку text
|
|||
|---|---|---|---|
|
#18+
2SergSuper: really? Такой примерчик: create table t1 (col1 text) insert into t1 values ('тут очень длинная строка') Для проверки: select datalength(col1) from t1 ----------- 10000 select substring(col1, 1, 9000) from t1 возвращает ошибку: Expression result length exceeds the maximum. 8000 max, 9000 found. MSSQL 2000 И?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2002, 15:58:51 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32048450&tid=1820573]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 323ms |

| 0 / 0 |
