我想找出 XML Schema totalDigits/fractionDigits和 SQL 数字精度/比例之间的对应关系。
1)假设我们有以下简单类型:
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
我将如何在 SQL 中表示它?让我们假设 HSQL 方言(无关紧要)。我对最严格的 SQL 类型感兴趣,它可以保存 XML Schema 简单类型的值空间中的所有值。
会numeric(18,17)吗?或者numeric(35,17)?
2) 如果我们只有totalDigits?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="18"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
SQL 中的适当表示是什么?
3)或者只是fractionDigits?
<xs:simpleType name="DecimalNumber">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="17"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
从这一点开始:
scale ? fractionDigits
precision ? totalDigits
Run Code Online (Sandbox Code Playgroud)
在 HSQL 中:
DECIMAL (35, 17) -- 编辑:fractionDigits 是一个上限;在您的情况下,从无到 17。因此,要表示的值域范围从左侧的 18 位数字到右侧的 17 位(小数点)。因此,您需要 17 位和 (18 + 17) 位数字才能表示最大值:18 位数字,没有小数位。
对 DECIMAL (18) 的简单翻译实际上意味着 18 位数字没有小数点,因为比例默认为 0 - 不是 XSD 的等价物。为了允许捕获所有数字,需要对 DECIMAL (36, 18) 进行编码,就域值而言,它会超过 XSD 的 18 位总位数可表示的值。你得在这里打个电话。
在 SQL 中,我不知道有一种方法可以指定没有精度的比例。由于 XSD 不提供上限(它要求至少为 18)...您可能只需要选择一个数字,可能受您的基础架构限制(例如,MS-SQL 的精度最高为 38),或者不要'一点也不麻烦(Apache 的 HsqlDB 使用无限的精度和规模)。
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |