5

在 Access 2003 中,我需要显示这样的数字,同时保持前导零:

  • 080000
  • 090000
  • 070000

我应该为此使用什么数据类型?

4

5 回答 5

13

使用字符串(或文本,或 varchar,或您的特定 RDBMS 使用的任何字符串变体)并用您需要的任何字符(“0”)填充它。

于 2009-10-19T13:33:27.760 回答
4

关键问题:

前导零是有意义的数据,还是只是格式化?

例如,07086 是我的邮政编码,前导零是有意义的,因此美国邮政编码必须存储为文本。

值“1”、“01”、“001”和“0001”是否被认为是唯一的、合法的值,还是被认为是重复的?

如果前导零在您的表格中没有意义,并且只是用于格式化,则将数据存储为数字并根据需要使用前导零格式化以用于显示目的。

您可以使用Format()函数进行格式化,如以下示例查询所示:

SELECT Format(number_field, "000000") AS number_with_leading_zeroes
FROM YourTable;

此外,我所知道的所有数据库引擎中的数字存储和索引都比文本存储和索引更有效,因此对于大型数据集(数千条记录或更多),对数字数据使用文本数据类型的性能拖累可能是相当大。

最后,如果您需要对数据进行计算,您希望将它们存储为数字。

关键是从数据的使用方式开始,并相应地选择您的数据类型。应该只在演示时(在表格和报告中)担心格式化。

外观不应驱动表中字段中数据类型的选择。

于 2009-10-20T03:01:31.903 回答
3

如果您的真实数据看起来像您的示例并且具有固定位数,只需将数据存储在数字字段中并使用 Access 表设计中列的格式/输入掩码属性将它们显示为填充零。

除非您有可变数量的前导零,否则没有理由存储它们,这通常是一个坏主意。不必要地使用文本类型会损害性能,更容易引入异常数据,并使查询数据库变得更加困难。

于 2009-10-19T14:16:22.980 回答
1

使用 Unicode 压缩的固定宽度字符,带有 CHECK 约束以确保恰好六个数字字符,例如ANSI-92 查询模式语法:

CREATE TABLE IDs 
(
 ID CHAR(6) WITH COMPRESSION NOT NULL
    CONSTRAINT uq__IDs UNIQUE, 
 CONSTRAINT ID__must_be_ten_numeric_chars
    CHECK (ID ALIKE '[0-9][0-9][0-9][0-9][0-9][0-9]')
);
于 2009-10-19T15:02:55.117 回答
0

您是否需要将它们作为数字保留在表中(即确实认为您需要在查询中进行聚合 - 例如 SUM 等)?

如果没有,那么文本/字符串数据类型就足够了。

如果你这样做,那么也许你需要 2 个字段。

  1. 存储数字 [即 80000] 和
  2. 存储一些有关如何显示值的元数据
    • 也许某种掩码或格式化模式[例如'000000']。

然后您可以使用上面的模式字符串来格式化数字的显示

  • 如果您使用的是 .NET 语言,则可以使用 System.String.Format() 或 System.Object.ToString()

  • 如果您使用的是 Access 表单/报告,那么 Access 在其 UI 控件中使用非常相似的字符串格式化模式。

于 2009-10-19T14:02:16.670 回答