XML模式的totalDigits / fractionDigits与SQL精度/小数位数

我想找出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>

我将如何用SQL表示它?让我们假设HSQL方言(没关系).我对限制性最强的SQL类型感兴趣,该类型可以保存XML Schema简单类型的值空间中的所有值.

是数字(18,17)吗?还是数字(35,17)?

2)如果我们只有totalDigits怎么办?

<xs:simpleType name="DecimalNumber">
    <xs:restriction base="xs:decimal">
        <xs:totalDigits value="18"/>
    </xs:restriction>
</xs:simpleType>

什么是SQL的适当表示形式?

3)还是fractionDigits?

<xs:simpleType name="DecimalNumber">
    <xs:restriction base="xs:decimal">
        <xs:fractionDigits value="17"/>
    </xs:restriction>
</xs:simpleType>
最佳答案
首先考虑到这一点:

scale ≡ fractionDigits
precision ≡ totalDigits

在HSQL中:

1)DECIMAL(35,17)-编辑:fractionDigits是一个上限,在您的情况下是从无到17;因此,值的域从左边的18位到小数点右边的17位.因此,您需要左侧的17个小数位数18位数字.

2)天真地转换为DECIMAL(18)确实意味着18位数字不带小数点,因为小数位数默认为0,而不是XSD的等效值.为了允许捕获所有数字,需要对DECIMAL(36,18)进行编码,就域值而言,DECIMAL(36,18)超出了XSD的18个总位数所能表示的范围.您必须在这里打电话.

3)在SQL中,我不知道一种指定精度的方法.由于XSD没有提供上限(它要求至少18个上限)…您可能只需要选择一个数字,可能受基础架构的限制(例如,MS-SQL的最大精度为38),或者不要根本不用费心(Apache的HsqlDB使用无限的精度和规模).

转载注明原文:XML模式的totalDigits / fractionDigits与SQL精度/小数位数 - 代码日志