gpt4 book ai didi

sql - 按分隔符将 T-SQL 字符串拆分为列?

转载 作者:行者123 更新时间:2023-12-05 04:21:23 29 4
gpt4 key购买 nike

我有一个表,其中有一个列使用一组以连字符分隔的八个值,其中一些是空白的。我试图将这个字符串拆分成列,每个值对应于分隔字符串的位置:

表 1:

<表类="s-表"><头>记录字符串值<正文>录制1422100----130-1034-10901-12000录制2421100--公司--130-1034--录制3423000----130-1561--录制4111500--------rec5661300-710-企业--355-1106-10901-10100

期望的结果:

<表类="s-表"><头>记录col1col2col3col4col5col6col7col8<正文>录制1422100空空空13010341090112000录制2421100空公司空1301034空空录制3423000空空空1301561空空录制4111500空空空空空空空rec5661300710公司空35511061090110100

我已经尝试了一系列复杂的 SUBSTRING/CHARINDEX 函数,但我很好奇是否有更合适的解决方案?当我尝试 PARSENAME 函数时,它只返回 NULL 值,因为字符串中的每个位置都没有值。

SELECT 
Record
,PARSENAME(REPLACE(StringValue, '-', '.'), 1) AS col1
,PARSENAME(REPLACE(StringValue, '-', '.'), 2) AS col2
,PARSENAME(REPLACE(StringValue, '-', '.'), 3) AS col3
,PARSENAME(REPLACE(StringValue, '-', '.'), 4) AS col4
,PARSENAME(REPLACE(StringValue, '-', '.'), 5) AS col5
,PARSENAME(REPLACE(StringValue, '-', '.'), 6) AS col6
,PARSENAME(REPLACE(StringValue, '-', '.'), 7) AS col7
,PARSENAME(REPLACE(StringValue, '-', '.'), 8) AS col8
FROM table1

最佳答案

如您所知,parsename() 限制为 4 个位置。

这是一个 JSON 选项(假设 2016+)

 Select A.Record
,Pos1 = nullif(JSON_VALUE(JS,'$[0]'),'') --nullif() optional otherwise empty string
,Pos2 = nullif(JSON_VALUE(JS,'$[1]'),'')
,Pos3 = nullif(JSON_VALUE(JS,'$[2]'),'')
,Pos4 = nullif(JSON_VALUE(JS,'$[3]'),'')
,Pos5 = nullif(JSON_VALUE(JS,'$[4]'),'')
,Pos6 = nullif(JSON_VALUE(JS,'$[5]'),'')
,Pos7 = nullif(JSON_VALUE(JS,'$[6]'),'')
,Pos8 = nullif(JSON_VALUE(JS,'$[7]'),'')
From YourTable A
Cross Apply (values ('["'+replace(string_escape([StringValue],'json'),'-','","')+'"]') ) B(JS)

结果

enter image description here

关于sql - 按分隔符将 T-SQL 字符串拆分为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74227722/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com