You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL十六进制转数字语句转Superset/Trino实现求助

问题解决:PL/SQL转Trino的16进制字符串转数值语句

首先,你的核心问题是Trino中错误用substr(2)模拟PL/SQL的substr(-16)逻辑,导致截取的字符串片段不符,进而转换结果错误。

原PL/SQL逻辑拆解

substr('D0023377B23DB783',-16)的作用是取字符串的最后16个字符:

  • 若原字符串长度≥16,返回末尾16个字符;
  • 若原字符串长度=16,返回整个字符串。

你的Trino语句错误点

substr('D0023377B23DB783', 2)是从第2个字符开始截取到末尾,这和“取最后16个字符”的逻辑完全不匹配:

  • 当原字符串长度为16时,substr(2)会去掉第一个字符,返回15个字符的片段,自然和原结果差异极大。

正确的Trino语句

Trino提供了right()函数,可以直接取字符串的最后N个字符,完美对应PL/SQL的substr(string, -N):

select from_base(right('D0023377B23DB783', 16), 16);

额外说明

如果转换后的数值超出Trino的BIGINT范围(-9223372036854775808 ~ 9223372036854775807),from_base()会自动返回DECIMAL类型,确保大数值不会溢出,和PL/SQL的to_number()行为一致。

内容的提问来源于stack exchange,提问作者Ana Pinheiro Torres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:44:57