我正在使用SQL Server 2019来分隔逗号分隔的值列表。
我有一张看起来像下面的桌子
从我读过的StackOverflow来看,没有一个内置函数可以按我的意愿分割逗号。但是,我已经看到了String_Split我认为可能有用的交叉应用功能,但是我只能在单个列上使用它。
表结构如下:
CREATE TABLE neighbourhoods3.dbo.timeslots
(
year VARCHAR(50) NULL,
time_of_day VARCHAR(50) NULL,
day_of_week VARCHAR(50) NULL,
month VARCHAR(50) NULL,
season VARCHAR(50) NULL,
public_holiday VARCHAR(50) NULL,
public_holiday_minus_1 VARCHAR(50) NULL
) ON [PRIMARY]
GO
遗憾的是,尽管SQL Server现在支持string_split(),但不能保证返回集的顺序。
因此,我推荐一种替代方法,例如递归CTE。这是代码示例的示例:
with cte as (
select convert(varchar(max), NULL) as year,
convert(varchar(max), NULL) as time_of_day,
convert(varchar(max), NULL) as day_of_week,
convert(varchar(max), year) as year_rest,
convert(varchar(max), time_of_day) as time_of_day_rest,
convert(varchar(max), day_of_week) as day_of_week_rest
from t
union all
select convert(varchar(max), left(year_rest, charindex(',', year_rest + ',') - 1)) as year,
convert(varchar(max), left(time_of_day_rest, charindex(',', time_of_day_rest + ',') - 1)) as time_of_day,
convert(varchar(max), left(day_of_week_rest, charindex(',', day_of_week_rest + ',') - 1)) as day_of_week,
stuff(year_rest, 1, charindex(',', year_rest + ','), '') as year_rest,
stuff(time_of_day_rest, 1, charindex(',', time_of_day_rest + ','), '') as time_of_day_rest,
stuff(day_of_week_rest, 1, charindex(',', day_of_week_rest + ','), '') as day_of_week_rest
from cte
where year_rest <> ''
)
select year, time_of_day, day_of_week
from cte
where year is not null;
这是db <>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。