如何根据 sql 服务器或数据块中的特殊字符拆分数据
How do I split the data on the basis of special character in sql server or databricks
我有一个数据,其中包含 M_ID 列、CustomerID、维度
所以我想根据列名称的特殊字符 (___) 将数据拆分为列 - 维度
在特殊字符应该转到单独的列之前就像这样,即列名称:键值,后面的部分应该转到列名称:详细信息
源数据样本:
M_ID
CustomerID
Dimensions
12
20000
2___17971690,8___THANE,20___Experia_app_bflcust,63___GTM-MJZ5DX7 - 234 -
Table 结构应该是这样的:
M_ID
CustomerID
Keyvalue
Details
12
20000
2
17971690
12
20000
8
THANE
12
20000
20
Experia_app_bflcust
您可以使用 STRING_SPLIT
将数据拆分为 ,
。然后用CHARINDEX
求出___
,用SUBSTRING
分出两半。
SELECT
t.M_ID,
t.CustomerID,
SUBSTRING(s.Value, 1, NULLIF(CHARINDEX('___', s.Value), 0) - 1) Keyvalue,
SUBSTRING(s.Value, NULLIF(CHARINDEX('___', s.Value), 0) + LEN('___') + 1, LEN(s.Value)) Details
FROM YourTable t
CROSS APPLY STRING_SPLIT(t.Dimensions, ',') s;
结果
M_ID
CustomerID
Keyvalue
Details
12
20000
2
7971690
12
20000
8
HANE
12
20000
20
xperia_app_bflcust
12
20000
63
TM-MJZ5DX7 - 234 -
我有一个数据,其中包含 M_ID 列、CustomerID、维度
所以我想根据列名称的特殊字符 (___) 将数据拆分为列 - 维度 在特殊字符应该转到单独的列之前就像这样,即列名称:键值,后面的部分应该转到列名称:详细信息
源数据样本:
M_ID | CustomerID | Dimensions |
---|---|---|
12 | 20000 | 2___17971690,8___THANE,20___Experia_app_bflcust,63___GTM-MJZ5DX7 - 234 - |
Table 结构应该是这样的:
M_ID | CustomerID | Keyvalue | Details |
---|---|---|---|
12 | 20000 | 2 | 17971690 |
12 | 20000 | 8 | THANE |
12 | 20000 | 20 | Experia_app_bflcust |
您可以使用 STRING_SPLIT
将数据拆分为 ,
。然后用CHARINDEX
求出___
,用SUBSTRING
分出两半。
SELECT
t.M_ID,
t.CustomerID,
SUBSTRING(s.Value, 1, NULLIF(CHARINDEX('___', s.Value), 0) - 1) Keyvalue,
SUBSTRING(s.Value, NULLIF(CHARINDEX('___', s.Value), 0) + LEN('___') + 1, LEN(s.Value)) Details
FROM YourTable t
CROSS APPLY STRING_SPLIT(t.Dimensions, ',') s;
结果
M_ID | CustomerID | Keyvalue | Details |
---|---|---|---|
12 | 20000 | 2 | 7971690 |
12 | 20000 | 8 | HANE |
12 | 20000 | 20 | xperia_app_bflcust |
12 | 20000 | 63 | TM-MJZ5DX7 - 234 - |