Создайте новый столбец для каждого значения, разделенного знаком ";" SQL Сервер SUBSTRING - PullRequest
1 голос
/ 16 июня 2020

У меня есть этот 'Тесты' столбец с n строками

1 Test0;Test1;Test2
2 Test3;Test5;Test8
...
...

Мне нужно разделить каждое значение точкой с запятой и создать 1 столбец для каждого индекса.

Должен быть результат:

Column New1: 
Test0
Test3
Column New2:
Test1
Test5
Column New3:
Test2
Test8

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Я думаю, что это, вероятно, достаточно близко к тому, что вы хотите:

select t.*, s.*
from t cross apply
     (select max(case when seqnum = 1 then s.value end) as test_1,
             max(case when seqnum = 2 then s.value end) as test_2,
             max(case when seqnum = 3 then s.value end) as test_3             
      from (select s.value,
                   row_number() over (order by charindex(';' + s.value + ';', ';' + t.tests + ';')) as seqnum
            from string_split(t.tests, ';') s
           ) s
     ) s;

Здесь - скрипка db <>.

Примечание: этот подход не будет работать, если в столбце есть дубликаты.

0 голосов
/ 16 июня 2020

Попробуйте это

select SUBSTRING(Tests,1,CHARINDEX(';', Tests)-1) as New1,
SUBSTRING(Tests,CHARINDEX(';', Tests)+1,CHARINDEX(';', Tests,CHARINDEX(';', Tests)-1)-1) as New2,
SUBSTRING(Tests,CHARINDEX(';', Tests,CHARINDEX(';', Tests)+1)+1,len(Tests)) as New3


0 голосов
/ 16 июня 2020

Решено здесь Как разделить один столбец на два столбца на SQL сервере

(Примечание: этот подход предназначен для разделения одного столбца на два столбца)

declare @t table (id int, name  varchar(50))

select 
    case when CHARINDEX(';', Column)>0 
         then SUBSTRING(Column, 1, CHARINDEX(';', Column)-1) 
         else Column end Column1, 
    CASE WHEN CHARINDEX(';', Column)>0 
         THEN SUBSTRING(Column, CHARINDEX(';',Column)+1,len(Column))  
         ELSE NULL END as Column2
from @t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...