在SQL Server 2008中仅存储月份和年份?

10

在SQL Server 2008中,是否可以使用常规日期时间保存月份/年份?我不需要时间戳,并且该列将存储唯一的月/年组合(即10-11、11-11、12-11等)。

有什么建议吗?

5个回答

17

如果不知道预期使用情况,就无法给出正确的建议。然而,存储月份和年份至少可以通过以下三种方式轻松完成:

  • 使用日期字段,但始终将其存储为午夜时分的当月第一天;然后始终自定义格式化日期字段以进行显示
  • 添加整数年份和月份字段,并通过拆分日期填充它们
  • 添加一个整数字段,在其中将其编码为年份*100+月份或其他有用的方案

2
请注意,wallyk在他的第一个选项中提到了日期数据类型。这与Datetime字段不同。这三个选项都非常有意义。 - Jamie F
1
如果你想知道如何将整数分解回年/月,这是我使用C#的方法:year = birthday / 100; day = birthday % 100; - Vinicius Rocha

3

无论如何,SQL Server都会完整存储日期时间数据(年-月-日 时:分:秒.毫秒)。

当您存储日期时,可以将日期设为该月的第一天。在执行查询时,只需按照自己的喜好格式化日期即可。

http://www.sql-server-helper.com/tips/date-formats.aspx


2

从SQLServer 2008开始:

保存为Date列,并添加以下检查约束条件,以确保该值始终为该月的第一天:

datepart(month, MyDate)<>datepart(month,dateadd(day, -1, MyDate))

3
我喜欢这种方法,但我认为一个更简单的检查约束是 DAY(MyDate) = 1 - Sam

1

在 DateTime 列中,您不能仅存储年份和月份。不过,您可以将其余的值设置为默认值。例如:2011.10.1.1、2011.11.1.1 等。

或者您也可以将其存储为字符串。


0
SELECT RIGHT(CONVERT(VARCHAR(10), GETDATE(), 105), 7) AS [MM-YYYY]

你应该试试这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接