44

我需要在数据库中插入一年(例如:1988 ,1990 等)。当我使用 Date 或 Datetime 数据类型时,它显示错误。我应该使用哪种数据类型。

4

9 回答 9

39

常规的 4 字节 INT 太大了,浪费空间!

你没有说你正在使用什么数据库,所以我不能推荐一个特定的数据类型。每个人都在说“使用整数”,但大多数数据库以 4 个字节存储整数,这远远超出了您的需要。您应该使用两字节整数(SQL Server 上的 smallint),这样可以更好地节省空间。

于 2009-03-30T16:17:21.387 回答
32

如果您需要在数据库中存储一年,您可能想要使用 Integer 数据类型(如果您只存储年份)或 DateTime 数据类型(这将涉及存储基本上是 1/1/ 的日期1990 00:00:00 格式)。

于 2009-03-30T09:06:25.637 回答
14

嘿,你可以在 MySQL 中使用year()数据类型,它有两位数或四位数的格式。

注:四位数格式允许的值:1901 到 2155。两位数格式允许的值:70 到 69,代表 1970 到 2069 年

于 2010-03-23T06:53:42.113 回答
3

理想情况下,在 MSSQL 中存储“年份”取决于您使用它做什么以及该“年份”对您的应用程序和数据库的含义。话虽如此,这里有几件事要说明。MSSQL 中截至 2012 年的年份没有“数据类型”。我倾向于使用 SMALLINT,因为它只有 2 个字节(节省了 INT 要求的 4 个字节中的 2 个)。您的限制是您的年份不能超过 32767(从 SQL Server 2008R2 开始)。我真的不认为 SQL 会成为一万年后的首选数据库,更不用说 32767 年了。您可以将 INT 视为 MSSQL 中的 Year() 函数将数据类型“DATE”转换为 INT。就像我说的,这取决于您从哪里获取数据以及数据的去向,但是 SMALLINT 应该没问题。INT将是矫枉过正... 除非您有其他原因,例如我上面提到的原因,或者代码要求需要 INT 形式(例如与现有应用程序集成)。很可能 SMALLINT 应该没问题。

于 2012-02-07T14:49:03.093 回答
2

仅仅一年,没有别的吗?为什么不使用简单的整数?

于 2009-03-30T09:06:05.700 回答
1

如果您只需要存储年份,请使用整数。如果您认为在查询此列时会有基于日期的计算,您也可以使用 datetime

于 2009-03-30T09:06:07.757 回答
0

存储可能只是问题的一部分。这个值将如何在查询中使用?

是要与其他日期时间数据类型进行比较,还是所有关联的行也有数值?

您将如何处理需求的变化?您对用更短时间片替换年份的请求的反应有多容易?即现在他们想要按季度分解?

数字类型可以很容易地在日期时间查询中使用,方法是使用一个查找表来连接,其中包含开始和停止日期(1/1/X 到 12/31/x)等内容。

于 2012-10-10T16:33:00.443 回答
0

我不认为使用整数或整数的任何子类型是一个不错的选择。迟早您将不得不对其进行其他日期操作。同样在 2019 年,我们不必太担心空间问题。看看那些节省的 2 个字节在 2000 年花费了我们什么。

我建议使用年份 + 0101 转换为真实日期的日期。同样,如果您需要将一年中的一个月存储年 + 月 + 01 作为真实日期。

如果你这样做了,你以后就可以在上面正确地做“约会的东西”

于 2019-04-08T02:33:14.203 回答
0

您试图在数据库中插入一年,然后使用:
type YEAR

于 2019-08-18T12:08:19.783 回答