SQL Server STRING_SPLIT()

问题描述 投票:0回答:2

我正在尝试在列上使用此功能,但似乎不允许:

如果我使用

SELECT * 
FROM STRING_SPLIT('John,Jeremy,Jack', ',')

我得到了值“John”、“Jeremy”和“Jack”

如果我使用:

SELECT * 
FROM STRING_SPLIT(Obs, ' ')

Obs
是文字)

SELECT * 
FROM STRING_SPLIT(appointments notes, ' ')

我收到错误消息:

参数数据类型 void 类型对于 string_split 函数的参数 1 无效

我什至尝试过:

SELECT * 
FROM STRING_SPLIT(select obs from log, '-')

导致此错误:

关键字“select”附近的语法不正确。

消息 102,第 15 级,状态 1,第 6 行
“-”附近的语法不正确

如何解决这个问题?

sql sql-server split cross-apply
2个回答
3
投票

当您在表的列上使用 string_split() 时,您可以尝试使用交叉应用。

您的查询如下:

select value from 
 log cross apply STRING_SPLIT(obs,',') 

DB-Fiddle 您的询问:

 create table log(Obs varchar(500));
 insert into log values('ohn,Jeremy,Jack');

您的询问:

 select value from 
 log cross apply STRING_SPLIT(obs,',') 

输出:

价值
杰里米
杰克

示例:

 CREATE TABLE contacts (
     id INT PRIMARY KEY IDENTITY,
     first_name VARCHAR(100) NOT NULL,
     last_name VARCHAR(100) NOT NULL,
     phones VARCHAR(500)
 );

 INSERT INTO 
     contacts(first_name, last_name, phones)
 VALUES
     ('John','Doe','(408)-123-3456,(408)-123-3457'),
     ('Jane','Doe','(408)-987-4321,(408)-987-4322,(408)-987-4323');

查询:

 SELECT 
     first_name, 
     last_name,
     value phone
 FROM 
     contacts
     CROSS APPLY STRING_SPLIT(phones, ',');

输出:

名字 姓氏 电话
约翰 母鹿 (408)-123-3456
约翰 母鹿 (408)-123-3457
母鹿 (408)-987-4321
母鹿 (408)-987-4322
母鹿 (408)-987-4323

db这里


0
投票

谢谢大家的帮助,我已经尝试了你们的建议,但仍然遇到同样的错误。

这是日志列中的 2 条记录示例:

Obs 
ID:786988|Patient_ID:320165|Staff_ID:PF|Date:05/06/2021 13:00:24|DiaryTemplates_ID:244799|Notes:Relatório 786988|Access:1|EventID:5|Status:4|Staff_ID_Writer:PES|Staff_ID_Signature:0|StatusReason:|StatusObs:|DateReceived:05/06/2021 13:00:24|NameReceived:|CountPrints:0|Staff_ID_Auxiliar:PES|PatientEpisode_ID:664831| 

ID:872474|Patient_ID:340246|Staff_ID:PFI|AppointmentDate:29/05/2021 09:33:21|Convencao:XCD_ttt_NE_C2|NBenef:3X34977|NRequisicao:4SFR09995393153409|NAutorization:|Treatment_ID:6898|TreatmentCode:743.9|TotalValue:75,34|PatientValue:0,00|ConvencaoValue:75,34|StaffValue:0,00|FactConvencao:True|FactConvencaoDate:31/05/2021 19:14:53|FactStaff:False|FactStaffGuID:|PatientValueDiscount:0,00|Recibo:True|ReciboGuID:|FactConvencaoClinic_ID:HJUSD2|Piece:|ClinicsLocations_ID:1|FactConvencaoYearMonth:202105|FactConvencaoSequencial:31|FactConvencaoLote:155|FactConvencaoStaff_ID:TRI|Quantity:1|FactConvencaoLoteType:M|RequesterCode_Medico:M2XD33|RequesterCode_CentroSaude:XCD202|PatientDiary_ID:F45724|Appointment_ID:793049|DataExecucao:29/05/2021 09:30:00|DataEntrega:04/06/2021 00:00:00|PatientEpisode_ID:664807|ToExecute:True|Position:1|FactConvencaoNDevolucao:|FactConvencaoCanDefact:|NRequisicaoDate:|DataFacturacao:29/05/2021 09:33:21|ClinicalReportsDestinations_ID:|ClinicalReportsDestinations_ByWho:|ClinicalReportsDestinations_Date:|ClinicalReportsDestinations_DateDelivery:|TypeOrigem:|SPMS_IdMcdt:|

“|”之间的每个字符串':' 是另一个表的列名,其值位于 ':' 后面。数据类型为“

text
”。

我需要将这些值拆分为单独的列以更新其他表。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.