首页 > 解决方案 > SQL Server STRING_SPLIT()

问题描述

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

如果我使用

SELECT * 
FROM STRING_SPLIT('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 行
'-' 附近的语法不正确

我该如何解决这个问题?

标签: sqlsql-serversplit

解决方案


当您在表的列上使用 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<小提琴在这里


推荐阅读