Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串\使用SQL拆分,以逗号分隔列_Sql_Json_Sql Server_Split_Pivot - Fatal编程技术网

字符串\使用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