我有一个表,其中的一列包含一个列表(是的,我知道这违反了规范化)。我试图找到一些“重叠”函数的痛处,即
SELECT * FROM TABLE WHERE 'a,b,c' OVERLAP TABLE.LISTCOLUMN 因此,LISTCOLUMN包含a、b或c中的任意一个或全部
发布于 2012-09-05 02:36:21
有两个选项:
如果您使用的是Oracle10g或更高版本,请使用regexp_like:
select *
from my_table
where regexp_like(listcolumn, '[abc]')这与列中包含a、b或c的表中的所有内容相匹配。
或者,你可以做更可怕、更难维护的事情:
select *
from my_table
where listcolumn like '%a%'
or listcolumn like '%b%'
or listcolumn like '%c%'下面是一个演示的小SQL Fiddle。
然而,正如你已经知道的,从长远来看,适当地规范化你的数据库将会省去你很多的痛苦。
https://stackoverflow.com/questions/12269027
复制相似问题