在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字段用于存储该部门中谁的信息。
答案 0 :(得分:2)
如果该字段中的数据格式保证在每个值之前和之后都没有空格的逗号分隔符,那么POSITION
标量会找到它:
SELECT * FROM A
WHERE POSITION( ',15,', in id_clob ) > 0;
但这并不是很有效,而且很脆弱。如果值和逗号之间有空格,或者第一个值前面没有逗号,或者最后一个值没有逗号,则它将失败。
正如其他人所指出的那样,改变数据库设计会更好(如果可以的话)。但在现实世界中,这并不总是可行的。
答案 1 :(得分:1)
我建议建一个新表 -
person_department
-----------------
person_id
department_id
并通过一次解析格式错误的数据并将其置于此结构中而奋斗。
然后你可以轻松查询。
答案 2 :(得分:0)
不要考虑查询问题,而应该重新设计数据库。您的结构违反了数据库设计的1st normalisation form。