如何在日期字段sql server中仅插入日期和月份或月份或年份或任何组合

时间:2012-07-16 09:11:38

标签: c# asp.net sql-server-2008-r2

我在数据库中有一个出生日期字段,该日期是数据类型日期。我的aspx页面中有三个相同的下拉列表。一天下降,一个月下降,一个下一年。如果用户仅选择日期和月份或月份或年份或任何组合。如何将其插入数据库的日期字段中。

如果用户仅选择日期和月份或月份和年份或任何组合。如何将其插入数据库?

谢谢,

4 个答案:

答案 0 :(得分:2)

两个选项:

  • 将日,月和年保留在数据库中的单独(可为空)字段中
  • 在数据库中保留一个DateTime字段,在未提供时使用“虚拟”数据填充该字段,并有一个单独的字段来指示提供了哪些信息

第一个听起来对我来说更明智 - 这并不是说你真的可以用“1976年某个月的第19个”做很多明智的日期相关查询,这意味着你的数据准确地代表什么用户指定。

答案 1 :(得分:0)

在选择所有字段之前,不允许用户提交答案。这是标准方式。你可以使用验证器。 或者试试这个(我不确定) 1.将日期字段保留为空。 和/或

2.If(txtDate.Text =“”)然后 cmd.Parameters(“@ Date”)。Value = sqldatenull

答案 2 :(得分:0)

<00> 0000不是有效年份;首先,我将重新审视输入表单的要求,以确定什么是可选的和可能的添加验证。

如果只有年份是可选的,那么你可以简单地存储0001作为年份。

dt = new DateTime(Math.Max(1,dob_year), dob_month, dob_day);

如果日期和/或月份是可选的,则DateTime不是正确的数据类型,因为您无法存储空值,因此具有单独的日,月,年字段是唯一的选项。

答案 3 :(得分:0)

日期总是需要一天,一个月和一年,因为它指的是过去,现在或将来的实际日期。

所有日期必须在01/01/0001至31/12/9999范围内,因此无法存储0000年。

对于您的问题,有两种选择:

  • 将日期,月份和年份存储在三个单独的字段中。
  • 以通常方式存储日期,将日期的未指​​定部分设置为某些默认值。然后使用带有tinyint的第二个字段来存储三位标志,告诉您日期的哪些部分有效以及哪些不是