SQL Server 如何在逗号太多的地方进行STRING_SPLIT?

atmip9wb  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(107)

我有一个关于STRING_SPLIT的问题。我需要在字符串中用逗号分隔短语。问题是有些短语周围有更多的逗号。
这是一个例子:
1.档案,2.档案保管,**,**以备选择,3.城镇内容保管,4.税收管理,5.物流管理,6.档案保管,7.具体格式,8.网站安全
如你所见,在第2项中有一个逗号阻碍了用逗号除的过程,我该如何克服这种情况?
另一个问题是:是否有办法将参数传递给String_Split,其中带点next的数字可以作为分隔符而不是逗号?
从现在开始非常感谢!
同查询:

select * 
from string_split('1. Archiviazione, 2. Conservazione in archivi, ad accesso selezionato, 3. Conservazione in contenitori muniti di serratura, 4. Controllo degli accessi fisici, 5. Controllo degli accessi logici, 6. Custodia atti e documenti, 7. Formazione degli incaricati, 8. Sicurezza dei siti web', ',')

我得到了这样的结果:

dgiusagp

dgiusagp1#

这有点难看,而且肯定会有一些风险,但使用JSON可能是一种替代方法

Select value
 From  ( 
        Select [key]
              ,Value   = case when trim(Value) like '[0-9]%' then trim(Value) else null end
                         +case when lead(trim(Value),1,'') over (order by [key]) like '[0-9]%' 
                              then ''
                              else ' '+lead(trim(Value),1,'') over (order by [key]) 
                          end
        From  OpenJSON( '["'+replace(string_escape('1. Archiviazione, 2. Conservazione in archivi, ad accesso selezionato, 3. Conservazione in contenitori muniti di serratura, 4. Controllo degli accessi fisici, 5. Controllo degli accessi logici, 6. Custodia atti e documenti, 7. Formazione degli incaricati, 8. Sicurezza dei siti web','json'),',','","')+'"]' )
       ) A
Where Value is not null
Order By [key]

结果

1. Archiviazione
2. Conservazione in archivi ad accesso selezionato
3. Conservazione in contenitori muniti di serratura
4. Controllo degli accessi fisici
5. Controllo degli accessi logici
6. Custodia atti e documenti
7. Formazione degli incaricati
8. Sicurezza dei siti web

相关问题