什么类型的数据类型用于年和月?

时间:2011-10-18 05:40:55

标签: sql sql-server sql-server-2005

我必须在我的表中存储年份和月份以及下个月的其他两列主题和主题详细信息{i}我应该使用

我应该使用data type并通过制作smalldatetime之类的日期来存储它们吗?

我应该使用两列09/01/2011varchar来存储单独的年份和     月份如int 2011

我应该使用一列09来存储它们并将它们连接起来     比如varchar

已编辑

有一件事我还想补充一点,我必须在搜索中使用这些列,所以我必须在where子句中使用它们所以在回答这个事情也很重要

3 个答案:

答案 0 :(得分:7)

通常情况下,无论您的限制是什么,我都建议您使用日期日期类型,因为它允许您进行日期操作和比较。然后,您可以使用触发器将日期限制为该月的第一天。您需要触发器,以确保您无法获得一个月/年组合的两行。

  

实际上,正如Damian_The_Unbeliever在评论中正确指出的那样,如果您的意图是仅允许用户尝试插入月份的日期,则不会需要触发器在这种情况下,约束可能就足够了。只有在您希望允许用户尝试插入任何日期但实际强制它成为该月的第一天的情况下,才需要该触发器。

但是,在这种情况下,根据您的使用情况,我会对两列年/月设置感到满意。

通过使用两个整数类型列,您无需担心触发器,并且您似乎不需要根据列规范对表内容进行大量处理。

如果您预见到需要处理给定的数据(与月份无关),我不会将它们存储为单个整数类型列。将年份分开将允许一个独特的索引,这可能比获得一系列YYYYMM值更快。

说真的,选择您认为最容易编码的那个(并满足功能要求)。然后,如果,,如果发现性能问题,请查看架构重组。数据库不是一劳永逸的事情,你应该不断监视它们的问题,并在必要时改变一些事情。

答案 1 :(得分:2)

如果您需要在这些字段上进行查找,我会使用dateformat。两个int将使用更多空间,varchar应该用char替换,因为你的大小是固定的。但正如我所提到的,我会坚持使用日期格式。

答案 2 :(得分:0)

我建议每个月和每年都有两个单独的列:

Month TINYINT
Year INT