十六进制到 ASCII 字符串的即时转换

Hex to ASCII string conversion on the fly

我想知道是否有可能读取包含十六进制值的 table 的记录,并在显示/使用它们作为结果之前将它们即时转换为字符串数据类型(例如在示例图片上,原始数据显示在左侧,程序如何解释它在右侧)。

数据取自 MS Dynamics NAV v5 (SP1) ERP 软件...

此外,我想知道是否有可能设置一个条件(例如 where),可以将其键入为字符串(例如 where something like 'OS%') 并且 DBMS 可以将其转换为十六进制并在 table 中搜索它以缩小查询的最终结果。

提前感谢大家的宝贵时间。

根据你的信息,这个专栏来自Microsoft Dynamics NAV,听起来很清楚。

MSDN documentation 是这样说的:

Specifies the record that the link is attached to.

The following syntax is used:

<table name>: <primary key1>, <primary key2>, <primary key3>

我很确定,Microsoft 有一个针对此值的组合架构,这有点奇怪,但我认为 fiddle 并不难。

如果将值拆分为 FF,您会看到两个结果:

--0xB6A1E6050089FF4252412D4D3032000000
select convert(int,0xB6A1E6050089FF) -- Object_ID for the specified table
select convert(varchar(100),0x4252412D4D3032000000) -- Primary Key 1

您可以尝试更进一步并在您的机器上执行:

select object_name(convert(int,0xB6A1E6050089FF))

这应该会给您一个有效的 table 名称。希望。 ;-)

我这边没法检查,因为我还没有安装那些系统。如果是这样,我可以在此结果中添加一个简短的命令来为您自动拆分。

您的其他字符串可以这样拆分:

--0x1E150000008B000000000089FF534F3030303133353532000087102700000000
SELECT convert(int,0x1E150000008B000000000089FF) -- 35327 (object_id)
SELECT convert(varchar(100),0x534F30303031333535320000) -- SO00013552
SELECT convert(int,0x87102700000000) -- 0

我想,你需要动态解析它。你应该检查 basetable (第一部分)。之后,检查主键的顺序。检查完后,您可以将它们动态解析为目标格式。唯一可能有点困难的是拆分的部分。通常第一部分应该持续到 FF。之后每个部分可以被多个零分割。