从列中的逗号分隔列表中选择

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

我有一个表,表1,

Table1

并且我想选择与区域3相邻的所有区域。对此我的查询是什么? NEIGHBOR列是CHAR列。

我知道不应以这种方式设置表,但这是我必须使用的表,因为我没有数据库的权限。

sql sql-server
2个回答
4
投票

修复您的数据模型!造成这种情况的原因有很多。

但是,如果您卡在上面,可以使用:

select t.*
from t
where ',' + neighbor + ',' like '%,3,%';

您也可以使用string_split()取消嵌套值:

select t.*
from t cross apply
     string_split(t.neighbor, ',') s
where s.value = '3';

1
投票

您可以将STRING_SPLIT()用作

SELECT *
FROM Data
WHERE Region IN 
(
  SELECT Value 
  FROM STRING_SPLIT((SELECT Neighbor FROM Data WHERE Region = 3), ',')
);

查询将返回0行,因为表中没有区域标记为区域3的邻居。

如果将(3, 'Name3', '5,8,12'),更改为(3, 'Name3', '1,2'),,它将返回区域1和2,因为它们是区域3的邻居。

这里是db<>fiddle

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