我想创建一个计算列。
我有一张表说表1有一个名为“加入日期”的列。
我想通过减去今天的日期和[加入日期]列来创建一个将返回Months(int)值的列。
我用过这个:( datediff(月,[DateJoining],getdate()))
它运行得很好,但我不知道为什么计算类型列为null 类型甚至我使DateJoining列非空类型
任何帮助都是高度赞赏的。
答案 0 :(得分:1)
我不能告诉你为什么SQL Server会这样做,我也不明白为什么它比理解更重要(你不会真正得到它,因为我不知道这里是否有人可以解释为什么就是这种情况)。我认为对于一个int它可能会防止溢出(即使在这种情况下显然不可能)。
如果您确实希望系统目录确认该列不可为空:
ALTER TABLE dbo.whatever ADD column_name
AS (ISNULL(datediff(month, DateJoining, getdate()), 0));
注意:此技巧不适用于COALESCE
。