用于存储前导零的数字的适当数据类型是什么?

时间:2009-10-19 13:31:40

标签: ms-access formatting string-formatting

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

  • 080000
  • 090000
  • 070000

我应该使用哪种数据类型?

5 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:4)

关键问题:

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

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

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

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

您可以使用Format()功能进行格式化,如本例中的查询:

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

此外,我所知道的所有数据库引擎中的数字存储和索引都比文本存储和索引更有效,因此对于大型数据集(数以千计的记录和更多),使用文本数据类型进行数字处理的性能拖累数据可能非常大。

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

使用带有CHECK约束的Unicode压缩修复宽度字符,以确保正好六个数字字符,例如ANSI-92 Query Mode语法:

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]')
);

答案 4 :(得分:0)

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

如果没有,那么text / string数据类型就足够了。

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

  1. 存储号码[即80000]和
  2. 存储一些有关如何显示值的元数据
    • 也许某种掩码或格式化模式[例如'000000']。
  3. 然后,您可以使用上述模式字符串格式化数字的显示

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

    • 如果您使用的是Access表单/报表,则Access会在其UI控件中使用非常相似的字符串格式设置模式。