ORACLE 12.x
遇到一个数据问题,我看到过去XML数据存储在CLOB列中。一段时间以来,数据以Json形式保存在CLOB中。数据库中没有其他列可以帮助区分存储的值类型。
我怎样才能准确地选择CLOB是Json的行?如何才能准确地只选择CLOB为XML的行?
我一直在尝试使用以下内容,但担心的是Json可能在其值中包含'<'字符。因此,我认为我需要一种方法来验证第一个非空格,非空白字符是<</p>
// Find Json
SELECT *
FROM DB.COLUMN
WHERE DBMS_LOB.INSTR(CLOB_COLUMN, '<') = 0
和
// Find XML
SELECT *
FROM DB.COLUMN
WHERE DBMS_LOB.INSTR(CLOB_COLUMN, '<') >= 1
我认为json不能以'<'字符开头。可以用这个来查找XML列:
// Find XML
SELECT *
FROM DB.COLUMN
WHERE CLOB_COLUMN like '<%>'
和json:
// Find json
SELECT *
FROM DB.COLUMN
WHERE CLOB_COLUMN like '{%}'
//查找Json
SELECT *
FROM DB.COLUMN
WHERE CLOB_COLUMN IS JSON
和
//查找XML
SELECT *
FROM DB.COLUMN
WHERE CLOB_COLUMN IS NOT JSON
我对我的虚拟数据库中的所有行进行了记录计数,其中数字加起来。
- JSON记录:38575
- XML记录:4972
- 记录总数:43547
- DB: 43547