我需要在数据库中插入一年(例如:1988年,1990年等)。当我使用Date或Datetime时 数据类型,它显示错误。我应该使用哪种数据类型。
答案 0 :(得分:32)
常规的4字节INT是大的方式,是浪费空间!
您没有说出您正在使用的数据库,因此我不推荐使用特定的数据类型。每个人都说“使用整数”,但大多数数据库存储4个字节的整数,这比你需要的多。您应该使用两个字节的整数(SQL Server上的smallint),这将更好地节省空间。
答案 1 :(得分:28)
如果您需要在数据库中存储一年,您可能要使用Integer数据类型(如果您只设置存储年份)或DateTime数据类型(这将涉及存储基本上为1的日期) / 1/1990 00:00:00格式)。
答案 2 :(得分:10)
嘿,您可以在MySQL中使用年()数据类型 它有两位数或四位数格式。
注意:允许的值为四位数格式:1901至2155.两位数格式允许的值:70至69,代表1970年至2069年的年份
答案 3 :(得分:3)
在MSSQL中存储“年份”理想情况下取决于您使用它做什么以及该“年份”对您的应用程序和数据库的意义。话虽如此,这里有一些事情需要说明。在MSSQL中,2012年没有“DataType”。我倾向于使用SMALLINT,因为它只有2个字节(节省了INT要求的4个字节中的2个)。您的限制是您不能超过32767年(从SQL Server 2008R2开始)。我真的不认为SQL将是一万年后的选择数据库,更不用说32767了。你可以认为INT作为MSSQL中的Year()函数确实将数据类型“DATE”转换为INT。就像我说的,这取决于你获取数据的位置以及它的发展方向,但是SMALLINT应该没问题。 INT会有点过分......除非你有其他原因,比如我上面提到的那个或者代码要求是否需要INT形式(例如与现有应用程序集成)。很可能SMALLINT应该没问题。
答案 4 :(得分:1)
仅仅一年,没有别的? 为什么不使用简单的整数?
答案 5 :(得分:1)
如果您需要存储的只是年份,请使用整数。如果您在查询此列时认为会有基于日期的计算,也可以使用日期时间
答案 6 :(得分:0)
存储可能只是问题的一部分。如何在查询中使用此值?
是否会与其他日期时间数据类型进行比较,还是所有关联的行也都有数值?
您将如何处理对要求的更改?您对以较小时间片替换年份的请求有多容易?即现在他们希望按季度分解?
数字类型可以在日期时间查询中轻松使用,方法是使用查找表连接包含开始和停止日期(1/1 / X到12/31 / x)等内容。
答案 7 :(得分:0)
我认为使用整数或整数的任何子类型都不是一个好选择。迟早您将不得不执行其他日期,例如对其进行操作。同样在2019年,我们不要太担心空间。看看节省的2个字节在2000年使我们付出了什么。
我建议使用年份+ 0101转换为真实日期。同样,如果您需要存储一年中的月份,则将存储年份+月份+ 01作为真实日期。
如果您这样做了,以后就可以正确地对其进行“约会工作”
答案 8 :(得分:0)
您尝试在数据库中插入年份,然后使用:
type YEAR