使用SQL Server 2008日期数据类型存储年份

时间:2009-10-23 19:25:42

标签: c# sql-server-2008

在SQL 2008中新的Date SQL类型中存储一年是否有意义?我的老板想要这个,但我们提示客户在网页表格中输入年份可选项。只需4个整数。我不明白为什么我们使用Date数据类型,因为它还包括日期和月份,我已经将这些分离到我们的数据库表中的int字段中。

在我们的网络表单中,年份是可选的,因此如果他们只输入月份和日期,那么我将这个存储在日期类型的字段中是没有意义的,因为年份必须是不可思议的。我想我们可以做到01-16-1900,如果他们没有进入年份然后我们只有一天和一个月..但不管怎样,对我来说这是一个黑客。我宁愿将所有3个分隔成单独的字段,因为我们将其中一个值(年份)作为可选项。我不认为我们需要一年,因为这是一个生日,我们已经讨论过,如果我们需要一年的话,这会让客户感到厌烦。

4 个答案:

答案 0 :(得分:2)

不要过度思考这一点。只需使用日期类型并完成它。

注意:

考虑到Ron的答案,分别存储每个日期组件是一个倒退的步骤。你应该总是利用给你的工具。 Date类型是任何.NET语言中的一等公民。

如果您没有考虑过,使用日期将节省空间。

http://msdn.microsoft.com/en-us/library/bb675168.aspx

答案 1 :(得分:2)

不,这没有任何意义。它将在数据库中产生更多空间,并且还会不必要地添加您正在寻找年份的任何代码。您必须在每个查询中使用DatePart()或在代码中提取年份。这两种方法都会伤害到性能。

但如果你的老板告诉你这样做,那么你应该这样做。我不会提出这个问题。你老板的推理是什么?

更正

我撤回上面的答案部分,即“数据库中有更多空间”。我所指的性能节省是按年转换为查询。

答案 2 :(得分:1)

如果没有理由将单独的日/月int列放入Date列,我不明白为什么可选年应存储为日期。

有些东西让我想把月/日列视为日期......但我喜欢“不要过分思考”的其他逻辑......

答案 3 :(得分:1)

我个人将所有3个值(月,日,年)存储为日期字段中的日期 - 如果他们没有输入,则默认年份。这样你就可以自动验证有效的月份和日期......除了2月29日和没有年份,因为日期数学不知道它是否是闰年。

将它们存储为int意味着您必须自己进行所有验证。