我一直在尋找的日期時間確定性截斷功能不可爲空截斷功能,這一次做的工作:確定性的日期時間
DATEADD(dd, DATEDIFF(dd, 0, @date), 0)
但是,這被認爲是輸入到一個持久化計算列這將成爲主鍵的一部分,所以它必須是不可空的。所以我做了這個:
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), '01.01.1900')
但是現在表達式變得非確定性。任何人都可以告訴我爲什麼,以及我如何才能確定它?
謝謝!
我一直在尋找的日期時間確定性截斷功能不可爲空截斷功能,這一次做的工作:確定性的日期時間
DATEADD(dd, DATEDIFF(dd, 0, @date), 0)
但是,這被認爲是輸入到一個持久化計算列這將成爲主鍵的一部分,所以它必須是不可空的。所以我做了這個:
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), '01.01.1900')
但是現在表達式變得非確定性。任何人都可以告訴我爲什麼,以及我如何才能確定它?
謝謝!
01.01.1900
不確定性...
這就是:
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), CONVERT(datetime, '19001010', 112)))
或本
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, fooDT), 0), 0)
欲瞭解更多信息,請參閱Why is my CASE expression non-deterministic?其導致best way to convert and validate a date string
ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), 0)
也就是說,我的猜測是不確定性的部分是'01.01.1900'
,因爲它取決於區域設置。
@gbn,Martin Smith,JNK:謝謝,夥計們。 – 2012-02-24 15:40:58
我們通常在這裏http://chat.stackexchange.com/rooms/179/the-heap – gbn 2012-02-24 15:43:34
不要使用字符串常量,使用一些任意的數字,而不是01 .01.1900'
@Andriy M的回答是正確的,在我之前。您應該接受 – gbn 2012-02-24 15:44:04