我想创建一个类似这样的列:
create table dbo.t1
(
[Notification_Month] datepart(mm, [date]) null,
)
我想将月份存储为日期属性,而不存储日期的其他部分。我知道这是一个奇怪的问题,但是这个表正在被WPF应用程序使用,所以如果SQL Server允许这样做会更容易限制日期条目,但如果不是,我可能会找到一个使用c#的长而复杂的解决方案。
如果这是不可能的,我还有一些其他的解决方法,但在我说它不是之前想过,总是最好用堆栈检查。
答案 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。 [...]
另一种选择是: