我在 SQL Server 表中有以下值:
但我需要构建查询,其输出如下所示:
我知道我可能应该使用 substring 和 charindex 的组合,但我不知道该怎么做。
你能帮我查询应该是什么样子吗?
谢谢!
我在 SQL Server 表中有以下值:
但我需要构建查询,其输出如下所示:
我知道我可能应该使用 substring 和 charindex 的组合,但我不知道该怎么做。
你能帮我查询应该是什么样子吗?
谢谢!
您可以使用string_split
功能:
select t.offerid, trim(translate(tt.value, '[]"', ' ')) as contractTypes
from table t cross apply
string_split(t.contractTypes, ',') tt(value);
尝试以下方法,它可能会起作用。
SELECT
offerId,
cTypes
FROM yourTable AS mt
CROSS APPLY
EXPLODE(mt.contractTypes) AS dp(cTypes);
列中每一行的数据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()
默认模式(结果是一个带有列的表key
,value
并且列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