在列中匹配逗号分隔值

Ale*_*rin 3 sql sql-server csv comma

如果我有一个名为"Categories" science,maths,english的列,如下所示,以逗号分隔的行显示,如何匹配包含类别的所有行maths

我尝试过一个简单的LIKE但是不太准确,因为搜索时可能会有'poo_science' '%science%'会匹配两者.

我查看了StackOverflow并且有很多类似的问题但是所有人似乎都希望将数据作为逗号分隔列表或其他东西返回 - 这不是我所追求的.

我不想使用存储过程,也不能使用全文搜索.我有一个我使用的存储过程,('$')在每个值周围添加了另一个字符,然后搜索'$value$'...这是太讨厌了吗?我采用了一种更简单的方法.

Mic*_*son 9

免责声明:评论员是对的...单个字段中的CSV是一个可怕的设计,应该重新完成.

话虽如此,这是你如何解决你的问题:

Categories使用前导和尾随填充,,这样您就可以将它们包含在通配符搜索中:

WHERE (',' + Categories + ',') LIKE '%,science,%'
Run Code Online (Sandbox Code Playgroud)


Ama*_*jee 6

使用FIND_IN_SET(,)

SQL:

SELECT name FROM orders,company
WHERE orderID = 1 
AND 
FIND_IN_SET(companyID, attachedCompanyIDs)
Run Code Online (Sandbox Code Playgroud)

或者可以查看此链接FIND_IN_SET()vs IN()

  • FIND_IN_SET 仅适用于 MySQL。很好的解决方案,但不适用于 SQL Server。 (2认同)