是否可以在Microsoft SQL Server中创建一个作为日期部分的列

本文关键字:一个 日期部 Microsoft SQL 创建 Server 是否 | 更新日期: 2023-09-27 18:21:45

我想创建一个类似这样的列:

create table dbo.t1
(
    [Notification_Month] datepart(mm, [date]) null,
)

我希望将月份存储为日期属性,而不存储日期的其他部分。我知道这是一个奇怪的问题,但WPF应用程序正在使用此表,因此如果SQL Server允许,限制日期条目会更容易,但如果不允许,我可能会使用c#找到一个漫长而复杂的解决方案。

如果这不可能的话,我还有一些其他的解决办法,但在我说不可能之前,我想了想,最好用堆栈检查一下。

是否可以在Microsoft SQL Server中创建一个作为日期部分的列

尽管您仍然必须将[date]存储为date类型,但您可以使用计算列:

Create Table yourTable(
     [NOTIFICATION_MONTH] DATE,
     , [MONTH_NOTIFIED] as DATEPART(MONTH, [NOTIFICATION_MONTH])
)

添加PERSISTED会将其保存在表中。如果没有它,每次都会自动计算。

在MSDN CREATE TABLE页面的computed_column_expression:下

是一个表达式,用于定义计算列的值。计算列是不物理存储在表中的虚拟列,除非该列标记为PERSISTED。该列是根据使用同一表中其他列的表达式计算的。例如,计算列可以具有以下定义:成本AS价格*数量。[…]

另一种选择是:

  • 创建一个包含月份的tinyint的表
  • 在表上创建带有日期的视图
  • 在视图上创建触发器并按月替换日期
  • 在视图中插入日期