2012-02-24 8 views
2
私はdatetime型のため、確定切り捨て機能を探していました

する機能と、この1は仕事でした:決定論的非NULL可能切り捨て日時

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

をしかし、これはその意志永続計算列に入力することになっています主キーの一部であるため、null不可能でなければなりません。だから私はこれを作った:

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

しかし、今や表現は非決定的になった。なぜ誰かが私にそれを伝えることができますか、それを決定論的にする方法はありますか?

ありがとうございます!ある

+1

@Andriy Mの回答は正しいものの、私の前には。あなたはそれを受け入れるべきです – gbn

答えて

5

01.01.1900が確定的ではありません...

を。これは、次のとおりです。

ISNULL(DATEADD(dd, DATEDIFF(dd, 0, @date), 0), CONVERT(datetime, '19001010', 112))) 

またはこの

ISNULL(DATEADD(dd, DATEDIFF(dd, 0, fooDT), 0), 0) 

さらに詳しくは、を参照すると、best way to convert and validate a date string

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

は、私の推測では、それはロケール設定に依存するため、非決定論的部分は、'01.01.1900'です。

+0

@ gbn、マーティンスミス、JNK:ありがとう、みんな。 –

+1

私たちは通常ここにいますhttp://chat.stackexchange.com/rooms/179/the-heap – gbn

0

ではなく'01のいくつかの任意の番号を使用し、文字列定数を使用しないでください.01.1900'

関連する問題