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

时间:2015-11-13 15:55:44

标签: c# sql-server create-table datepart

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

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

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

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

1 个答案:

答案 0 :(得分:9)

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

script

添加Create Table yourTable( [NOTIFICATION_MONTH] DATE, , [MONTH_NOTIFIED] as DATEPART(MONTH, [NOTIFICATION_MONTH]) ) 会将其保存在表格中。没有它,它将每次自动计算。

computed_column_expression下的MSDN CREATE TABLE页面上:

  

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

另一种选择是:

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