Excel实现Oracle utl_raw.cast_to_raw同效数字转RAW格式方法求助
Excel 实现 Oracle
utl_raw.cast_to_raw 等价转换方法 转换逻辑说明
纯数字字符的ASCII编码范围为0x30(对应字符'0')到0x39(对应字符'9'),Oracle的utl_raw.cast_to_raw函数的核心逻辑是逐字符取其编码值,转换为两位十六进制大写字符串拼接输出,和你观察到的“数字每一位前补3拼接”的现象完全吻合。
实现方案
方案1:高版本Excel(Microsoft 365/Excel 2021及以上)直接公式实现
假设待转换的数字/字符串存放在A1单元格,在目标单元格输入以下公式即可:
=TEXTJOIN("",TRUE,DEC2HEX(CODE(MID(A1,SEQUENCE(LEN(A1)),1)),2))
效果验证:
- A1输入
123456,公式输出313233343536,与Oracle查询结果完全一致 - A1输入
999,公式输出393939 - A1输入
56,公式输出3536
方案2:低版本Excel(Excel 2019及更早)自定义函数实现
无动态数组支持的旧版本可以通过VBA自定义函数简化操作,步骤如下:
- 按
Alt+F11唤起VBA编辑器 - 右键点击左侧工程栏的当前工作簿名称,依次选择「插入」-「模块」
- 在右侧代码编辑区输入以下代码:
Function CastToRaw(TargetStr As String) As String Dim i As Integer, charCode As Integer For i = 1 To Len(TargetStr) charCode = Asc(Mid(TargetStr, i, 1)) ' 转换为固定两位大写十六进制,不足补前导零,严格匹配Oracle输出格式 CastToRaw = CastToRaw & UCase(Right("0" & Hex(charCode), 2)) Next i End Function - 回到Excel界面,直接使用函数即可,比如A1存放待转换内容,在目标单元格输入
=CastToRaw(A1)就能得到一致的转换结果。
注意事项
- 所有单字节场景下的转换结果均与Oracle输出无偏差,无需额外调整格式
- 如果需要处理中文等多字节字符,可根据实际数据库字符集(如UTF-8、GBK)调整代码中取字节编码的规则,保证和Oracle输出对齐。
内容的提问来源于stack exchange,提问作者Sankalp Kotewar
相关产品推荐
相关产品推荐

