【问题标题】:Convert a BLOB to VARCHAR instead of VARCHAR FOR BIT将 BLOB 转换为 VARCHAR 而不是 VARCHAR FOR BIT
【发布时间】:2020-11-19 20:49:09
【问题描述】:

我正在选择的表中有一个 BLOB 字段。此字段数据仅包含 JSON 数据。

如果我执行以下操作:

Select CAST(JSONBLOB as VARCHAR(2000)) from MyTable

--> 这将返回 VARCHAR FOR BIT DATA 格式的值。

我只希望它是标准字符串或 varcher - 不是位格式。

那是因为我需要使用 JSON2BSON 函数将 JSON 转换为 BSON。 JSON2BSON 接受字符串,但不接受 BIT DATA 类型的 VarChar...

这个对话应该很容易。

我可以将选择作为 VARCHAR FOR BIT DATA.. 使用 UI 手动复制它。将其粘贴到选择文字中并将其转换为 BSON。我需要将这个 BLOB 中的一堆数据从 JSON 迁移到 BSON,并且手动执行不会很快。我只是想解释一下这应该是多么简单的用例。

什么是选择命令基本上让它工作:

  Select JSON2BSON(CAST(JSONBLOB as VARCHAR(2000))) from MyTable

--> 目前这失败了,因为 CAST 将这个(即使它只有文本字符)转换为 BIT DATA 类型的 VARCHAR,而不是标准 VARCHAR。

有什么建议可以解决这个问题?

Windows 上的 DB2 11。

【问题讨论】:

    标签: db2 db2-luw


    【解决方案1】:

    如果数据是JSON,那么表列首先应该是CLOB...

    如果数据实际上已经是 BSON,则将表列设置为 BLOB 可能有意义。

    【讨论】:

    • 应该是,但不是。
    【解决方案2】:

    您可以使用 converttoclob 过程将 blob 更改为 clob,然后就可以了。

    https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/r0055119.html

    【讨论】:

      【解决方案3】:

      您可以使用此功能删除列上的“FOR BIT DATA”标志

      CREATE OR REPLACE FUNCTION DB_BINARY_TO_CHARACTER(A VARCHAR(32672 OCTETS) FOR BIT DATA)
          RETURNS VARCHAR(32672 OCTETS)
          NO EXTERNAL ACTION
          DETERMINISTIC
      BEGIN ATOMIC
          RETURN A;
      END
      

      或者,如果您使用的是 Db2 11.5,那么函数 SYSIBMADM.UTL_RAW.CAST_TO_VARCHAR2 也可以使用

      【讨论】:

        猜你喜欢
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 2019-08-12
        • 1970-01-01
        相关资源
        最近更新 更多