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

ryoqjall  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个数据表,其中有一个单一数据行,使用以勒胡号分隔的八个值,其中有些是空白的。我尝试将这个字串分割成数据行,每个值Map到分隔字串的位置:
表一:
| 记录|字符串值|
| - -|- -|
| 记录1| 422100----130-1034-10901--12000的电话号码|
| 建议2| 421100--公司--130-1034--|
| 建议3| 423000-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 建议4| 111500--|
| 建议5| 661300-710-公司-355 - 1106 -10901-10100|
预期结果:
| 记录|列1|第2列|第3列|第4列|第5列|第6列|第7列|第8列|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|
| 记录1|小行星422|空值|空值|空值|一百三十个|小行星1034|小行星10901|一万二千元|
| 建议2|小行星421100|空值|公司|空值|一百三十个|小行星1034|空值|空值|
| 建议3|小行星423000|空值|空值|空值|一百三十个|小行星1561|空值|空值|
| 建议4|小行星111500|空值|空值|空值|空值|空值|空值|空值|
| 建议5|小行星661300|七一零|公司|空值|三五五|小行星1106|小行星10901|小行星10|
我已经尝试了一系列复杂的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
ewm0tg9j

ewm0tg9j1#

如您所知,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)

结果

相关问题