Sql server 提取特殊字符SQL之间的所有值
我在SQL Server表中有以下值: 但我需要构建一个输出如下所示的查询: 我知道我可能应该使用substring和charindex的组合,但我不知道怎么做 你能告诉我这个查询应该是什么样的吗Sql server 提取特殊字符SQL之间的所有值,sql-server,sql-server-2019,Sql Server,Sql Server 2019,我在SQL Server表中有以下值: 但我需要构建一个输出如下所示的查询: 我知道我可能应该使用substring和charindex的组合,但我不知道怎么做 你能告诉我这个查询应该是什么样的吗 谢谢大家! 试试下面的方法,可能有用 SELECT offerId, cTypes FROM yourTable AS mt CROSS APPLY EXPLODE(mt.contractTypes) AS dp(cTypes); 尝试以下方法,可能会奏效 SELE
谢谢大家! 试试下面的方法,可能有用
SELECT
offerId,
cTypes
FROM yourTable AS mt
CROSS APPLY
EXPLODE(mt.contractTypes) AS dp(cTypes);
尝试以下方法,可能会奏效
SELECT
offerId,
cTypes
FROM yourTable AS mt
CROSS APPLY
EXPLODE(mt.contractTypes) AS dp(cTypes);
contractTypes
列中的每一行中的数据都是有效的JSON数组,因此您可以使用显式模式(结果是一个包含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
表:
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
offerId contractId contractType
1 1 Hlavni pracovni pomer
2 1 ÖCVS
2 2 Staz
2 3 Prahovne
作为一个附加选项,如果要返回合同类型在contractTypes
数组中的位置,可以使用带有默认模式的OPENJSON()(结果是一个包含列键
、值
和类型
的表格,键
列中的值是数组中元素的基于0的索引):
结果:
offerId contractTypes
1 Hlavni pracovni pomer
2 ÖCVS
2 Staz
2 Prahovne
offerId contractId contractType
1 1 Hlavni pracovni pomer
2 1 ÖCVS
2 2 Staz
2 3 Prahovne
contractTypes
列中的每一行中的数据都是有效的JSON数组,因此您可以使用显式模式(结果是一个包含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
表:
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
offerId contractId contractType
1 1 Hlavni pracovni pomer
2 1 ÖCVS
2 2 Staz
2 3 Prahovne
作为一个附加选项,如果要返回合同类型在contractTypes
数组中的位置,可以使用带有默认模式的OPENJSON()(结果是一个包含列键
、值
和类型
的表格,键
列中的值是数组中元素的基于0的索引):
结果:
offerId contractTypes
1 Hlavni pracovni pomer
2 ÖCVS
2 Staz
2 Prahovne
offerId contractId contractType
1 1 Hlavni pracovni pomer
2 1 ÖCVS
2 2 Staz
2 3 Prahovne
您可以使用string\u split
函数:
select t.offerid, trim(translate(tt.value, '[]"', ' ')) as contractTypes
from table t cross apply
string_split(t.contractTypes, ',') tt(value);
您可以使用string\u split
函数:
select t.offerid, trim(translate(tt.value, '[]"', ' ')) as contractTypes
from table t cross apply
string_split(t.contractTypes, ',') tt(value);
您使用的是哪个SQL引擎?如果我理解正确,您希望分解数组,对吗?我使用的是Microsoft SQL server 2019,是的,我需要获取每个值,并将其类似于输出,这意味着例如,offerId=1将是三行,其中每个值都来自您使用的SQL引擎的contractType数组?如果我取消derstand是否正确?是否要分解数组?我使用的是Microsoft SQL server 2019,是的,我需要获取每个值,并将其像输出中一样。这意味着,例如,offerId=1将是三行,其中每个值都来自contractType array。幸运的是,不起作用。我有以下错误:'explode'不是可识别的函数ion名称。不幸的是不起作用,我有以下错误:'EXPLODE'不是可识别的函数名。