检查逗号分隔列表是否包含特定数字

时间:2017-06-26 13:20:20

标签: sql regex oracle

我有一个列是一个文本字符串,其中包含逗号分隔的ID列表。它可能看起来像这样:

  

1,2,3,45,65,23245,564747,23,121,54,65,345678

我需要查找它是否包含特定的ID。要获得它只是包含一个数字对于正则表达式来说相当简单,但问题是例如id 4不在列表中但很多id包含4.也许它仍然可以写一个可以处理它的正则表达式,但它高于我的水平。或者还有另一种方法可以在SQL中解决这个问题吗?

修改

为了澄清,我实际上没有包含逗号分隔列表的列。我所拥有的是一个listagg,它是由查询中的几行组成的,我希望能够对它应用过滤器。我只是试图简化问题,以便更专注于实际问题。我没有意识到这样做会导致数据库设计上的答案比实际问题更多。

2 个答案:

答案 0 :(得分:3)

将值存储在以逗号分隔的列表中是一种非常糟糕的设计模式,它只会带来令人头疼的问题。如果可以,请将其标准化。

如果不能,您可以使用比较中的逗号搜索特定ID:

WHERE [Column] LIKE '%,4,%'
   OR [Column] LIKE '4,%'
   OR [Column] LIKE '%,4'

答案 1 :(得分:2)

正如其他人所说,逗号分隔的值很糟糕,但如果你想要的话,这是一种方式:

float16