Я знаю, что это старый Вопрос, но я думаю, что кто-то может извлечь пользу из моего решения.
select
SUBSTRING(column_name,1,CHARINDEX(' ',column_name,1)-1)
,SUBSTRING(SUBSTRING(column_name,CHARINDEX(' ',column_name,1)+1,LEN(column_name))
,1
,CHARINDEX(' ',SUBSTRING(column_name,CHARINDEX(' ',column_name,1)+1,LEN(column_name)),1)-1)
,SUBSTRING(SUBSTRING(column_name,CHARINDEX(' ',column_name,1)+1,LEN(column_name))
,CHARINDEX(' ',SUBSTRING(column_name,CHARINDEX(' ',column_name,1)+1,LEN(column_name)),1)+1
,LEN(column_name))
from table_name
SQL FIDDLE
Преимущества:
- Он разделяет все 3 разделителя подстрок на ''.
- Нельзя использовать цикл while, так как это снижает производительность.
- Нет необходимости в Pivot, так как все результирующие подстроки будут отображаться в
одна строка
Ограничения:
- Нужно знать общее число. пробелов (подстрока).
Примечание : решение может давать подстроку до N.
Чтобы преодолеть ограничение, мы можем использовать следующее ref .
Но опять же вышеприведенное решение нельзя использовать в таблице (на самом деле я не смог его использовать).
Опять же, я надеюсь, что это решение кому-нибудь поможет.
Обновление: В случае записей> 50000 не рекомендуется использовать LOOPS
, поскольку это ухудшит производительность