【问题标题】:SQL :: Split comma separated column values and apply IN operator [duplicate]SQL :: 拆分逗号分隔的列值并应用 IN 运算符 [重复]
【发布时间】:2015-01-06 11:44:09
【问题描述】:

问题陈述::

我有一个名为 category 的数据库表,其中包含作为 categoryIds 的列名,下面是 categoryIDs 列中的示例数据

categoryIds = '17,34,400,12'

现在我已经编写了下面的 SQL 查询来找出类别

将@search 声明为 varchar

设置@search='40'

从 categoryIds like '%' + @search + '%' 的类别中选择 *

上面的查询返回结果是错误的,因为 categoryIDs 不包含 40 个类别

【问题讨论】:

  • Normalize 你的表并创建另一个通过外键引用它的表。然后每个值都有一条记录,查询非常简单高效(更不用说sql injection漏洞)。

标签: sql sql-server


【解决方案1】:

这可能对你有帮助:

DECLARE @categoryIds VARCHAR(100) = '17,34,400,12'

SELECT t1.nod.value('.', 'varchar(50)') tags
FROM   (SELECT Cast('<N>' + Replace(@categoryIds, ',', '</N><N>')
                    + '</N>' AS XML) AS format) t
       CROSS APPLY format.nodes('/N') AS t1(nod)
WHERE  t1.nod.value('.', 'varchar(50)') = '40' 

【讨论】:

  • 感谢回复,上述查询的输出是 400 这是错误的它应该是 NULL 因为 40 不存在于 '17,34,400,12' 列表中
  • @AmolGunjal 您可以修改 where 子句。我将like转换为等于条件。
猜你喜欢
  • 2013-10-05
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2023-04-09
相关资源
最近更新 更多