【发布时间】:2020-10-23 19:59:09
【问题描述】:
我想从完整的表列表中检索某些记录。在这里,我使用带有 IN 子句的逗号分隔值。表格行如下所示:
这是我的 SQL 查询,但查询完成时结果集为空`
DECLARE @input VARCHAR(1000) = '2,3,17,10,16'
SELECT * FROM locations
WHERE
east_zone in (SELECT VALUE FROM string_split(@input,','))
OR
west_zone in (SELECT VALUE FROM string_split(@input,','))
感谢您的帮助!
【问题讨论】:
-
停在那里。在 SQL 表中存储 CSV 通常是个坏主意。尝试根据另一个 CSV 列表搜索一个 CSV 列表并不是一个好主意。尝试规范化您的数据,以便您可以利用原生 SQL 函数。
-
该错误是因为您提供的分隔符的长度为 0 而不是 1 (
'')。如果你想用逗号分割,那么你需要传递一个逗号作为分隔符的参数,例如string_split(@input,',')。但是,这无论如何都行不通,您还需要拆分列数据,而这一切都是一种糟糕的方法。您的东/西值会更好地存储在单独的表中 -
@GarethD 感谢您发现语法错误。我已经更新了我的问题。我们如何将 csv 列数据拆分为
temp表并进行相应查询? -
如果用户提供 (10,22) 并且eastzone 存储为 (17,10,8,79,74,22),那么预期的输出是什么
-
@GeorgeJoseph 它应该返回唯一的行
标签: sql sql-server delimiter where-in number-with-delimiter