使用 CCSID 转换值以匹配 db2 中的另一个十六进制

Posted

技术标签:

【中文标题】使用 CCSID 转换值以匹配 db2 中的另一个十六进制【英文标题】:Casting a value with CCSID to match another hexidecimal in db2 【发布时间】:2019-12-04 14:03:30 【问题描述】:

我有一个可以在我的 DB2 编辑器中手动运行的查询:

SELECT          *
FROM            TableOne T1
WHERE           CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x'0213725502A3BC45706AEE6001';

但是,当我尝试将十六进制值作为参数时,它不起作用:

    SELECT          *
    FROM            TableOne T1
    WHERE           CAST(T1 . IDENITIFIER AS CHAR(26) CCSID 65535) = x':identifier'

我怎样才能正确地将 x 附加到字符串值/参数,以便进行动态查询,我可以在其中注入标识符?还是有另一种方法可以通过将此原始值与 ccsid 进行匹配来获得相同的结果?

【问题讨论】:

试试HEXTORAW函数。 @MarkBarinstein 这是否适用于 400 上的 IBM Iseries 版本 7? @MarkBarinstein hextoraw(:Value) 执行但不返回结果,我的初始查询返回结果 用字符串常量0213725502A3BC45706AEE6001尝试CAST(HEXTORAW(:Value) AS CHAR(26) CCSID 65535) @MarkBarinstein 我试过 CAST(HEXTORAW(T . IDENTIFIER) AS CHAR(26) CCSID 65535) = '0213725502A3BB8F2149C82001' 但它说函数 VARBINARY_FORMAT 的参数 01 无效 【参考方案1】:

您可以在以下语句中使用字符串0213725502A3BC45706AEE6001x'0213725502A3BC45706AEE6001' 的十六进制表示)作为参数值:

SELECT *
FROM TableOne T1
WHERE CAST(T1.IDENITIFIER AS CHAR(26) CCSID 65535) = CAST(HEXTORAW(:identifier) AS CHAR(26) CCSID 65535)

【讨论】:

以上是关于使用 CCSID 转换值以匹配 db2 中的另一个十六进制的主要内容,如果未能解决你的问题,请参考以下文章

return 语句中使用的局部变量不会隐式转换为 r 值以匹配转换运算符

WebSphere MQ中的CCSID

索引空值以在 DB2 上快速搜索

输入值以部分匹配数组中的项目并返回 true

返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?

MQ EOL 数据转换