0

In EDIFACT there are numeric data elements, specified e.g. as format n..5 -- we want to store those fields in a database table (with alphanumeric fields, so we can check them). How long must the db-fields be, so we can for sure store every possible valid value? I know it's at least two additional chars (for decimal point (or comma or whatever) and possibly a leading minus sign).

We are building our tables after the UN/EDIFACT standard we use in our message, not the specific guide involved, so we want to be able to store everything matching that standard. But documentation on the numeric data elements isn't really straightforward (or at least I could not find that part).

Thanks for any help

4

2 回答 2

1

我终于在 UN/EDIFACT rules Part 4. UN/EDIFACT rules Chapter 2.2 Syntax Rules的文档中找到了UNECE 网站上的信息。他们没有直接说出来,但是当你把所有的部分放在一起时,你就明白了。参见 TOC 条目 10:数字数据元素值的表示。

它基本上是这样说的:

10.1:十进制
标记 必须按照 UNA 中的规定传输(如果需要)十进制标记(逗号或点,始终放置一个字符)。在计算数据元素的最大字段长度时,不应将其视为值的一个字符。

10.2:三合一
分隔符 三合一分隔符不得互换使用。

10.3: 符号
[...] 如果一个值被指示为负数,它在传输中应紧跟在一个减号之前,例如-112。在计算数据元素的最大字段长度时,负号不应算作值的字符。但是,必须考虑发送和接收中的特性。

把它放在一起:
除了数字本身之外,数字字段中只允许使用两个(可选)字符:十进制分隔符和减号(任何字符之间不允许有空格)。这两个额外的字符不计入字段中值的最大长度。

因此,数字字段中的最大字符数是数字字段的最大长度加 2。如果您希望数据库能够存储在指定为 的字段中传输的每个语法正确的值n..17,则您的列必须是 19 个字符长(类似varchar(19))。在指定为的字段中具有超过 19 个字符的值的每个 EDIFACT 消息n..17不需要存储在数据库中以进行语义检查,因为它在语法上已经是错误的并且可以被拒绝。

于 2012-05-07T17:52:47.607 回答
0

我使用 Liaison 的 EDI Notepad 来解决类似的挑战。 https://liaison.com/products/integrate/edi/edi-notepad

我建议任何查看 EDI 的人至少获得他们的免费(快速)版本的 EDI 记事本。

他们产品的“高端”版本(EDI Notepad Productivity Suite)带有一个“字典查看器”工具,您可以导出元素的最小/最大长度以及类型。您可以从查看器工具将文档导出为 HTML。它也可以处理 ANSI X12。

于 2012-04-27T19:53:07.880 回答