2012-02-24 66 views
2

我一直在寻找的日期时间确定性截断功能不可为空截断功能,这一次做的工作:确定性的日期时间

DATEADD(dd, DATEDIFF(dd, 0, @date), 0) 

但是,这被认为是输入到一个持久化计算列这将成为主键的一部分,所以它必须是不可空的。所以我做了这个:

ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), '01.01.1900') 

但是现在表达式变得非确定性。任何人都可以告诉我为什么,以及我如何才能确定它?

谢谢!

+1

@Andriy M的回答是正确的,在我之前。您应该接受 – gbn 2012-02-24 15:44:04

回答

4
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), 0) 

也就是说,我的猜测是不确定性的部分是'01.01.1900',因为它取决于区域设置。

+0

@gbn,Martin Smith,JNK:谢谢,伙计们。 – 2012-02-24 15:40:58

+1

我们通常在这里http://chat.stackexchange.com/rooms/179/the-heap – gbn 2012-02-24 15:43:34

0

不要使用字符串常量,使用一些任意的数字,而不是01 .01.1900'