1

在 Oracle 数据库中,在表 A 中,有一个名为“ID_CLOB”的 clob 字段,存储了另一个表 B 中的一些 id。

例子:

|              ID_CLOB               |
,15,16,17,18,19,21,23,24,25,30,32,33,

这是我的问题,我如何从 SQL 语句中知道某个数字(例如 15)是否在“ID_CLOB”字段中?

提前感谢。

情况:

我实际上正在开发带有此数据库模式的第三方应用程序。想象一下场景:在表 B 中,每行都有人员信息,而表 A,假设它是一个部门表,每一行是一个部门,并且 clob 字段用于存储该部门的人员信息。

4

3 回答 3

2

如果保证该字段中的数据格式在每个值之前和之后都有逗号分隔符且没有空格,则POSITION标量会找到它:

SELECT * FROM A
      WHERE POSITION( ',15,', in id_clob ) > 0;

但是,这不是很有效,而且很脆弱。如果值和逗号之间有空格,或者第一个值前面没有逗号,或者最后一个值后面没有逗号,它将失败。

正如其他人所指出的,最好(如果可以的话)更改数据库设计。然而,在现实世界中,这并不总是可能的。

于 2012-10-26T17:42:08.110 回答
1

我会建议建立一个新表 -

person_department
-----------------
person_id
department_id

并努力一次性解析格式错误的数据并将其放入此结构中。

然后您可以轻松查询。

于 2012-10-26T17:00:14.310 回答
0

与其考虑对您的问题进行查询,不如重新设计您的数据库。您的结构违反了数据库设计的第一种规范化形式

于 2012-10-26T16:48:19.267 回答