字符串\使用SQL拆分,以逗号分隔列
我正在尝试使用“,”拆分一个文本字符串。所讨论的文本是我们的字符串\使用SQL拆分,以逗号分隔列,sql,json,sql-server,split,pivot,Sql,Json,Sql Server,Split,Pivot,我正在尝试使用“,”拆分一个文本字符串。所讨论的文本是我们的utm参数,看起来像这样: {\""medium\"":\""cpc\"",\""source\"":\""google\"",\""term\"":\""virtual cocktail making classes\
utm
参数,看起来像这样:
{\""medium\"":\""cpc\"",\""source\"":\""google\"",\""term\"":\""virtual cocktail making classes\"",\""campaign\"":\""virtual-events\""}
我的想法是以四个栏目结尾:媒体、来源、期限和活动。以下是我到目前为止尝试过的,但在APPLY附近不断出现语法错误
(SELECT id, VALUE
, ROW_NUMBER() OVER(PARTITION by id ORDER BY id) AS "RowNum"
FROM seodata
CROSS APPLY
string_split(utmparams,',')
)
SELECT id,
[1] AS "medium", [2] AS "source", [3] AS "term", [4] AS "campaign"
FROM NAME_CTE
PIVOT
(max(VALUE) FOR RowNum IN ([1],[2],[3],[4])) AS PVT
看起来您有JSON数据。如果是这样,我建议使用JSON函数而不是字符串函数:
select s.id, j.*
from seodata s
cross apply openjson(s.utmparams) with(
medium nvarchar(50),
source nvarchar(50),
term nvarchar(50),
campaign nvarchar(50)
) j
正如其他人所提到的,如果json确实是您正在做的事情,那么可能有更好的方法来处理json。也就是说,我的解决方案就是使用交叉应用、一些替换函数和pivot
DROP TABLE IF EXISTS #Table
CREATE TABLE #Table
(
SampleData VARCHAR(MAX)
)
INSERT INTO #Table VALUES
('{\""medium\"":\""cpc\"",\""source\"":\""google\"",\""term\"":\""virtual cocktail making classes\"",\""campaign\"":\""virtual-events\""}')
SELECT
*
FROM
(
SELECT
SampleData
,REPLACE(LEFT(value,CHARINDEX(':',value)-1),'{','') Col
,REPLACE(RIGHT(value,LEN(value) - CHARINDEX(':',value)),'}','') Value
FROM #Table
CROSS APPLY STRING_SPLIT(REPLACE(REPLACE(SampleData,'""',''),'\',''),',')
) z
PIVOT
(
MAX(Value)
FOR Col IN (medium, source, term, campaign)
) p