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

Sql 检查逗号分隔列表是否包含特定数字,sql,regex,oracle,Sql,Regex,Oracle,我有一个列,它是一个文本字符串,包含以逗号分隔的ID列表。它可能看起来像这样: 1,2,3,45,6523245564747,23121,54,65345678 我需要找到它是否包含特定的id。要知道它是否只包含一个数字,使用正则表达式相当简单,但问题是,例如,id 4不在列表中,但很多id都包含一个4。也许仍然可以编写一个正则表达式来处理这个问题,但这超出了我的水平。或者在SQL中是否有其他方法可以解决这个问题 编辑 只是澄清一下,我实际上没有包含逗号分隔列表的列。我有一个listagg,它是

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

1,2,3,45,6523245564747,23121,54,65345678

我需要找到它是否包含特定的id。要知道它是否只包含一个数字,使用正则表达式相当简单,但问题是,例如,id 4不在列表中,但很多id都包含一个4。也许仍然可以编写一个正则表达式来处理这个问题,但这超出了我的水平。或者在SQL中是否有其他方法可以解决这个问题

编辑


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

将值存储在逗号分隔的列表中是一种非常糟糕的设计模式,它只会让人头疼。如果可以,将其正常化

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

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

在逗号分隔的列表中存储值是一种非常糟糕的设计模式,它只会带来麻烦。如果可以,将其正常化

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

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

正如其他人所说,逗号分隔的值是不好的,但如果您仍然需要,这是一种方法:

select * from t where REGEXP_LIKE (col , '(^|,)4(,|$)')

正如其他人所说,逗号分隔的值是不好的,但如果您仍然需要,这是一种方法:

select * from t where REGEXP_LIKE (col , '(^|,)4(,|$)')

如果SQL数据库中有逗号分隔的列表,则数据库设计中存在错误(即缺少表)。修复错误,而不是查询。这已经在这里被询问了至少100次,我只是链接到一个这样的线程。被接受的答案至少有一半的线程也有被接受的答案。无需重新发明轮子。如果SQL数据库中有逗号分隔的列表,则表明数据库设计中存在错误(即缺少表)。修复错误,而不是查询。这已经在这里被询问了至少100次,我只是链接到一个这样的线程。被接受的答案至少有一半的线程也有被接受的答案。没有必要重新发明轮子。。。。或者您只需执行其中的“,”| |[列]| |“,”如“%,4,%”。。。或者您只需执行WHERE“,”| |[列]| |“,”之类的操作,如“%”,4,%”