1

我在 SQL Server 表中有以下值:

输入

但我需要构建查询,其输出如下所示:

输出

我知道我可能应该使用 substring 和 charindex 的组合,但我不知道该怎么做。

你能帮我查询应该是什么样子吗?

谢谢!

4

3 回答 3

0

您可以使用string_split功能:

select t.offerid, trim(translate(tt.value, '[]"', '   ')) as contractTypes
from table t cross apply
     string_split(t.contractTypes, ',') tt(value);
于 2020-04-12T14:52:24.000 回答
0

尝试以下方法,它可能会起作用。

SELECT 
  offerId, 
  cTypes   
FROM yourTable AS mt  
CROSS APPLY  
EXPLODE(mt.contractTypes) AS dp(cTypes);  
于 2020-04-12T06:19:12.210 回答
0

列中每一行的数据contractTypes都是一个有效的 JSON 数组,因此您可以使用带有显式模式的OPENJSON()(结果是在子句中定义了列的表WITH)来解析这个数组并获得预期的结果:

桌子:

CREATE TABLE Data (
   offerId int,
   contractTypes varchar(1000)
)
INSERT INTO Data
   (offerId, contractTypes)
VALUES
   (1, '[   "Hlavni pracovni pomer"      ]'),
   (2, '[   "ÖCVS", "Staz", "Prahovne"   ]')

桌子:

SELECT d.offerId, j.contractTypes
FROM Data d
OUTER APPLY OPENJSON(d.contractTypes) WITH (contractTypes varchar(100) '$') j

结果:

offerId contractTypes
1       Hlavni pracovni pomer
2       ÖCVS
2       Staz
2       Prahovne

作为一个附加选项,如果你想返回合约类型在contractTypes数组中的位置,你可以使用OPENJSON()默认模式(结果是一个带有列的表keyvalue并且列type中的值key是元素的从 0 开始的索引在数组中):

SELECT 
   d.offerId, 
   CONVERT(int, j.[key]) + 1 AS contractId, 
   j.[value] AS contractType
FROM Data d
OUTER APPLY OPENJSON(d.contractTypes) j   
ORDER BY CONVERT(int, j.[key])

结果:

offerId contractId  contractType
1       1           Hlavni pracovni pomer
2       1           ÖCVS
2       2           Staz
2       3           Prahovne
于 2020-04-12T07:29:32.773 回答