sql - 年和月使用什么类型的数据类型?

标签 sql sql-server sql-server-2005

我必须在表格中存储年份和月份,以及下个月的另外两列主题和主题详细信息我应该使用什么数据类型

我应该使用smalldatetime并通过创建像09/01/2011这样的日期来存储它们吗?

我应该使用两列varcharint来存储单独的年份和 2011 09 等月份?

我应该使用一列varchar来存储它们并连接它们 像201109

已编辑

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

最佳答案

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

Actually, as Damian_The_Unbeliever rightly points out in a comment, you don't need triggers if your intent is to only allow users to attempt insertion of dates where the day of the month is 1. In that case, constraints will probably be enough. It's only the case where you want to allow users to attempt to insert any date but actually force it to become the first day of that month, that triggers would be required.

但是,在这种情况下,根据您的用例,我对两列年/月设置非常满意。

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

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

认真地说,选择您认为最容易编码的一个(并且满足功能要求)。然后,如果并且您发现性能问题,请考虑架构重组。数据库不是一劳永逸的东西,您应该不断监视它们是否存在问题,并在必要时进行更改。

关于sql - 年和月使用什么类型的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7802879/

相关文章:

mysql - 多人多组SQL

sql-server - 如果 SQL 变量存在

sql-server - Soundex并检查无效声音

sql-server - SQL 查询确定增值税率

mysql - SQL Server 2005 32 位 - 错误 : The OLE DB provider "OLEDB.1" for linked server "(null)" reported an error. 提供程序内存不足

sql-server-2005 - 在存储过程中执行 CTE 操作时出现无效对象错误?

sql - 如何计算 SQL 行数

sql - SQL 数据库设计初学者指南

sql - 选择具有默认值的可空位

mysql - SQLite 如何知道日期列是否是当前月份