在single-select-sql中,通过特定的分隔符将带有奇怪字符串的一列拆分为多列



我正在寻找/希望找到一个更简单的解决方案,尽管我已经找到了一个有效的解决方案。

但我很难接受,这是唯一的办法。因此,我希望一个优秀的sql超级用户可能会有更好的想法。

背景:

一张看起来像这样的简单表格:

怪异字符串 ID
A;GHL+BH;BC、NA-NB、[AB] 1
B;GHL+BH;BC、NA-NB、[AB] 2
C;GHL+BH;BC、NA-NB、[AB] 3

您似乎正在使用SQL Server 2017(v.14(,因此一个可能的选择是以下基于JSON的方法。其思想是使用TRANSLATE()将存储的文本转换为有效的JSON数组(A;GHL+BH;BC,NA-NB,[AB]["A","GHL","BH","BC","NA","NB","AB"](以进行字符替换,并使用JSON_VALUE():获得字符串的预期部分

SELECT
weirdstring,
JSON_VALUE(jsonweirdstring, '$[0]') AS group1,
JSON_VALUE(jsonweirdstring, '$[1]') AS group2,
JSON_VALUE(jsonweirdstring, '$[2]') AS group3
FROM (  
SELECT 
weirdstring,
CONCAT('["', REPLACE(TRANSLATE(weirdstring, ';+-,[]', '######'), '#', '","'), '"]') AS jsonweirdstring
FROM TESTTABLE
) t  

最新更新