我有一个表,其中有一列使用连字符分隔的八个值集,其中一些为空白。我试图将此字符串拆分为列,每个值对应于分隔字符串的位置:
Table1:
Record |
StringValue |
rec1 |
422100----130-1034-10901-12000 |
rec2 |
421100--CORP--130-1034-- |
rec3 |
423000----130-1561-- |
rec4 |
111500------- |
rec5 |
661300-710-CORP--355-1106-10901-10100 |
期望的结果:
Record |
col1 |
col2 |
col3 |
col4 |
col5 |
col6 |
col7 |
col8 |
rec1 |
422100 |
NULL |
NULL |
NULL |
130 |
1034 |
10901 |
12000 |
rec2 |
421100 |
NULL |
CORP |
NULL |
130 |
1034 |
NULL |
NULL |
rec3 |
423000 |
NULL |
NULL |
NULL |
130 |
1561 |
NULL |
NULL |
rec4 |
111500 |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
rec5 |
661300 |
710 |
CORP |
NULL |
355 |
1106 |
10901 |
10100 |
我尝试了一系列复杂的 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