在EDIFACT中有数字数据元素,例如,格式为n..5 - 我们希望将这些字段存储在数据库表中(使用字母数字字段,以便我们检查它们)。 db-fields必须有多长时间,因此我们可以确保存储每个可能的有效值?我知道它至少有两个额外的字符(小数点(或逗号或其他),可能还有一个前导减号)。
我们正在根据我们在消息中使用的UN / EDIFACT标准构建表格,而不是涉及的具体指南,因此我们希望能够存储符合该标准的所有内容。但是关于数字数据元素的文档并不是很简单(或者至少我找不到那个部分)。
感谢您的帮助
答案 0 :(得分:1)
我终于在UN / EDIFACT规则UNECE web site的文档中找到了关于Part 4. UN/EDIFACT rules Chapter 2.2 Syntax Rules 的信息。他们没有直接说出来,但是当你将所有部件放在一起时,你就会得到它。参见TOC条目10:数字数据元素值的表示。
这基本上就是这样说的:
10.1:十进制标记
必须按照UNA中指定的方式传输十进制标记(如果需要)(逗号或点,总是放一个字符)。在计算数据元素的最大字段长度时,不应将其计为值的字符。
10.2:Triad Seperator
三合一分离器不得用于交换。
10.3:签名
[......]如果要指示一个值为负数,则它应在传输之前立即加一个减号,例如: -112。在计算数据元素的最大字段长度时,减号不应计为值的字符。但是,必须考虑到传输和接收中的角色。
把它放在一起:
除了数字本身之外,在数字字段中只允许使用两个(可选)字符:十进制分隔符和减号(任何字符之间不允许空格)。这两个额外的字符不计入字段中值的最大长度。
因此,数字字段中的最大字符数是数字字段的最大长度加2.如果希望数据库能够存储在指定为n..17
的字段中传输的每个语法正确的值,你的专栏必须是19个字符长(类似varchar(19)
)。在指定为n..17
的字段中,每个EDIFACT消息的值都超过19个字符,不需要存储在DB中进行语义检查,因为它已经在语法错误中被拒绝了。
答案 1 :(得分:0)
我使用Liaison的EDI记事本来解决类似的挑战。 https://liaison.com/products/integrate/edi/edi-notepad
我建议任何看EDI的人至少得到他们的免费(快递)版本的EDI记事本。
他们产品的“高端”版本(EDI Notepad Productivity Suite)附带一个“字典查看器”工具,您可以导出元素的最小/最大长度以及类型。您可以从Viewer工具将文档导出为HTML。它也会处理ANSI X12。