首页 > 解决方案 > 如何在 DB2 9.5 和 11.5 中将 CLOB 强制转换为 INTEGER?

问题描述

我有一列将 XML 存储为 CLOB 数据,在这些 XML 中我有一个 ID 信息。首先,我使用 REGEX 表达式提取了 ID 信息,例如:

SELECT
    regexp_substr(XML_CONTENT, '(<identifier>)(.*)(<\/identifier>)', 1, 1, 'c', 2) as ID
FROM XML_TABLE w 

然后,此查询生成一个表,其中包含一个包含 ID 信息的 CLOB 列。例如:

|ID (CLOB)|

|123456| |456789|

现在我有了这些信息,我想将它与另一个表引用一个整数 PK 列,为此我需要将 CLOB ID 转换为 INTEGER ID。我怎样才能做到这一点?

我这样做是为了找到 DEV 和 PROD 数据库之间的差异,并且在这个环境中 DB2 版本是不同的,所以我需要这个查询来兼容 DB2 9.5 和 DB2 11.5。

标签: db2

解决方案


REXXP 函数是在 DB2 11.1 中引入的。因此,如果使用 Db2 9.5,您将需要使用例如 LOCATE 和 SUBSTR。例如

SELECT  
    SUBSTR(XML_CONTENT
    , LOCATE( '<identifier>',XML_CONTENT) + LENGTH('<identifier>')
    , LOCATE('</identifier>',XML_CONTENT) - LOCATE('<identifier>',XML_CONTENT) - LENGTH('<identifier>')
    )
FROM 
TABLE(VALUES
    'blah <identifier>Some value</identifier> blah') AS X (XML_CONTENT)

推荐阅读