【发布时间】:2012-02-23 22:07:18
【问题描述】:
如果我有一个名为“类别”的列,其中以逗号分隔的行中有 science,maths,english,如图所示,我将如何将所有行与包含 maths 的类别匹配?
我尝试了一个简单的LIKE,但它并不十分准确,因为在搜索'%science%' 时可能会匹配两者。
我环顾了 StackOverflow,有很多类似的问题,但似乎都想以逗号分隔列表或其他形式返回数据 - 不是我想要的。
我不想使用存储过程,也不能使用全文搜索。我有一个我使用的存储过程,它在每个值周围添加了另一个字符 ('$') 然后会搜索 '$value$'... 这太讨厌了吗?我正在寻求一种更简单的方法。
【问题讨论】:
-
这就是为什么多值属性是邪恶的。
-
@Yuck 我认为并发问题的增加是它们邪恶的原因。
-
我绝不会让这个设计站得住脚。您需要一个用于数据的子表,以便您可以有效地对其进行查询。永远不要存储逗号分隔的列表。
-
它们是邪恶的,因为您必须使用每行的函数拆分字符串,然后搜索其中的每一个或匹配有时会因特殊字符而分崩离析的确切模式。这很昂贵,你没有得到索引的任何好处,没有标准化,而且,嗯,******* 烦人。对不起,星星里的字符不是脏话,我不小心把密码贴进去了;-)
-
@DavidStratton 您能否详细说明
LIKE子句如何容易受到 SQL 注入的影响?我所能想象的只是有人输入%来进行表扫描...
标签: sql sql-server comma csv