|
|
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. как из строки \ext_bulk_insert\[2]\product_layout\loop\[1]\delete ext получить две строки: \ext_bulk_insert\[2] \ext_bulk_insert\[2]\product_layout\loop\[1] Реализовал следующим образом: Код: 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. Но можно ли как то реализовать проще? (может попробовать использование регулярных выражений на основе clr-функций) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 17:37:50 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, Размножить таблицу на 2, и через charindex разбить строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 18:13:57 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2017, 18:22:55 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
iap Код: sql 1. 2. Здравствуйте, jap. Вижу что не в полном объеме сделал описание задачи: число квадратных скобок всегда неопределенное. То есть если строка будет следующего вида: DECLARE @S VARCHAR(100)='\ext_bulk_insert\[2]\product\[5]\product_layout\loop\[1]\delete ext'; В таком случае результат должен быть следующим: \ext_bulk_insert\[2] \ext_bulk_insert\[2]\product\[5] \ext_bulk_insert\[2]\product\[5]\product_layout\loop\[1] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2017, 12:56:10 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, Для SQL Server 2016 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Для других версий ищите на форуме или гуглите любую функцию разбиения стоки по разделителю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2017, 14:15:30 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanovЗдравствуйте, jap. Вижу что не в полном объеме сделал описание задачи: число квадратных скобок всегда неопределенное.Привет! Но первая буква не j, а i Если сделать рекурсивное CTE, ищущее вхождение в строку правой квадратной скобки, то на каждом следующем шаге можно искать функцией CHARINDEX с третьим параметром, равным позиции, найденной на предыдущем шаге, плюс 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2017, 16:59:03 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
iap, действительно запрос получился более оптимальный: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2017, 12:48:45 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, можно обойтись и без рекурсии, если задействовать таблицу с достаточно большим количеством строк. Даже если в ней не будет поля с непрерывным рядом целых чисел, строки можно пронумеровать ROW_NUMBER()ом и для каждой строки взять n-й символ исходной строки, после чего числа нумерации для строк с правой квадртной скобкой дадут второй параметр функции LEFT(). Всё это оформить подзапросами или эквивалентными не рекурсивными CTE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2017, 13:05:38 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
iaprsolanov, можно обойтись и без рекурсии, если задействовать таблицу с достаточно большим количеством строк. Даже если в ней не будет поля с непрерывным рядом целых чисел, строки можно пронумеровать ROW_NUMBER()ом и для каждой строки взять n-й символ исходной строки, после чего числа нумерации для строк с правой квадртной скобкой дадут второй параметр функции LEFT(). Всё это оформить подзапросами или эквивалентными не рекурсивными CTE.Не понял вашу мысль, изначально ведь строка одна, поясните пожалуйста если не сложно предложенный вами алгоритм подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2017, 14:41:44 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, Как-нибудь вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2017, 14:58:27 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
rsolanov, Вот вам для размышлений на тему парсинга строк предложенными выше способами: Тест Код: 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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. Результат Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2017, 15:49:45 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=175&tid=1690742]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
55ms |
get topic data: |
30ms |
get forum data: |
4ms |
get page messages: |
137ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 466ms |

| 0 / 0 |
