Microsoft SQL Server中是否可以创建一个datepart列?

use*_*773 3 c# sql-server create-table datepart

我想创建一个像这样的列:

create table dbo.t1
(
    [Notification_Month] datepart(mm, [date]) null,
)
Run Code Online (Sandbox Code Playgroud)

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

我有一些其他的解决方法,如果这是不可能的,但在我说它不是之前想过,总是最好用堆栈检查.

Jul*_*eur 9

虽然您仍然需要将[date]存储为DATE类型,但您可以使用计算列:

Create Table yourTable(
     [NOTIFICATION_MONTH] DATE,
     , [MONTH_NOTIFIED] as DATEPART(MONTH, [NOTIFICATION_MONTH])
)
Run Code Online (Sandbox Code Playgroud)

添加PERSISTED会将其保存在表格中.没有它,它将每次自动计算.

computed_column_expression下的MSDN CREATE TABLE页面上:

是一个定义计算列值的表达式.计算列是未物理存储在表中的虚拟列,除非该列标记为PERSISTED.该列是根据使用同一表中其他列的表达式计算的.例如,计算列可以具有以下定义:cost AS price*qty.[...]

另一种选择是:

  • 创建一个月份为tinyint的表
  • 使用日期在表格上创建视图
  • 在视图上创建触发器并按月替换日期
  • 插入包含日期的视图