【问题标题】:DB2 cast partial blob to varcharDB2 将部分 blob 转换为 varchar
【发布时间】:2019-04-12 22:51:05
【问题描述】:

我有一个 db2 表,其中有一个 blob 列,其中包含 gzipped xml 数据。现在我想从 xml 的开头获取大约 20 个字符。我尝试将 blob 转换为 varchar,只要可以将整个 blob 转换为 varchar,它就可以正常工作。如果它太长,那么我会得到一个错误,并且 sql 请求会因以下错误而中断:SQL 错误 [22001]: Value "..." is too long.. SQLCODE= -433, SQLSTATE=22001, DRIVER=4.14.88

有没有机会只投射 blob的第一部分?

我想要实现的是,从 xml 中获取一个 id,然后可以将其用作另一个 sql 请求的一部分。

到目前为止我的sql:

SELECT SUBSTRING(CAST(DATA AS VARCHAR(17)),10,8,OCTETS)
FROM table
WHERE TRANSACTION_ID = '123';

谢谢!

【问题讨论】:

  • DB2 不支持 Blob/二进制数据上的 SUBSTRING(或类似函数)吗?如果列是 gzip 压缩的,那么如何在不解压缩的情况下获取前 n 个字符?
  • 其实你是完全正确的! :) 我没有注意到这很容易。

标签: sql casting db2 blob varchar


【解决方案1】:

正如dnoeth 在他的评论中所说,答案很简单,就是在转换之前对 blob 本身进行 substr。
所以 sql 看起来像这样:
SELECT CAST(SUBSTR(DATA,10,8) AS VARCHAR(8)) FROM table WHERE TRANSACTION_ID = '123';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2017-09-25
    • 2013-10-20
    • 2021-11-04
    相关资源
    最近更新 更多