我想在Array1 ( [0] => dfsg [1] => dfasg [2] => d5g [3] => )
Array2 ( [0] => d54fgv [1] => [2] => df4g4 [3] => d645 )
下划线之后解析一个字符串。例如,在字符串中:
2020_Campaign_SG_测试电子邮件
我需要:
nth
2,并创建名为Type的列Campaign
。
3,并创建名为Segment的列SG
,然后创建
名为名称的列答案 0 :(得分:1)
由于您使用的是SQL Server 16或更高版本,因此可以使用STRING_SPLIT
(确保使用的兼容性级别至少为130)。
我无法在任何拨弄链接上使用以下代码,但是您可以将其复制/粘贴到https://sqliteonline.com/中(将其设置为MS SQL,连接,复制/粘贴并运行):>
这是我能想到的最简单的形式:
WITH x AS (
SELECT
value v,
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) n
from STRING_SPLIT('2020_Campaign_SG_Test Email','_')
)
SELECT
[2] [Type],
[3] Segment,
[4] [Name]
FROM x
PIVOT(
MAX(v) FOR n IN([2],[3],[4])
) y
这将生成以下内容(第一行是表标题):
# Type Segment Name
Campaign SG Test Email
STRING_SPLIT
部分WITH x AS (
SELECT
value v,
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) n
from STRING_SPLIT('2020_Campaign_SG_Test Email','_')
)
在第一部分中,我创建了一个临时的命名结果集x
(又名CTE or common table expression)。结果集使用STRING_SPLIT
函数在下划线2020_Campaign_SG_Test Email
字符上分割字符串_
。我还使用ROW_NUMBER()
对结果集的输出进行了编号。
这将生成以下内容(第一行是表标题):
# v n
2020 1
Campaign 2
SG 3
Test Email 4
PIVOT
部分SELECT
[2] [Type],
[3] Segment,
[4] [Name]
FROM x
PIVOT(
MAX(v) FOR n IN([2],[3],[4])
) y
第二部分然后使用我们的结果集x
,并使用PIVOT
运算符将数据行相对于聚合转置为列。此处的聚合函数为MAX(v) FOR n IN([2],[3],[4])
。使用MAX
函数会删除所有NULL
的值(否则它将旋转并将每个v
移至其自己的列,并为其他列添加NULL
值),只有我们第二,第三和第四项作为输出(因为您仅在原始问题中将这三项指定为输出)。