我有一个数据表,其中有一个单一数据行,使用以勒胡号分隔的八个值,其中有些是空白的。我尝试将这个字串分割成数据行,每个值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
1条答案
按热度按时间ewm0tg9j1#
如您所知,
parsename()
仅限于4个位置。以下是JSON选项(假设2016年以上)
结果