2012-04-10 14 views
0

私はSQL Serverを使用していますが、私のケースでは1つの問題を特定するだけです。 私はとDATEDIFF関数を使用している:あなたは、私はD-D「」でDATEDIFFをしようとした場合、私は74/74.28との違いを得ることを観察することができる場合SQL ServerのDATEDIFF関数 - 異なるケースで異なる実行

select datediff(dd,'1935-12-07','2010-03-02')/365.00 ---> 74.28 
select datediff(dd,'1935-12-07','2010-03-02')/365  ---> 74 
select datediff(yy,'1935-12-07','2010-03-02')   ---> 75 

。 しかし、私が 'yy'でそれを使うと、私は75としてdiferenceを得ます。

なぜそうですか?意味は74に近いので、75という差が得られたのはなぜですか。

この両方の機能は別のケースで必要です。しかし、それは違った行動をしているので、私は多くの問題に直面しています。

私にこれにいくつかの解決策を提案してください。

ありがとうございました。

+1

DATEDIFF()の仕組みを理解するためのキーフレーズは、[manual](http://msdn.microsoft.com/en-US/library/ms189794.aspx "DATEDIFF(Transact-SQL ) "):*指定された開始日と終了日の間の**指定されたdatepart境界**のカウント(符号付き整数)を返します。* –

答えて

1

まずケース=あなたは暗黙的にfloat型にキャストしている、正しい結果を示している

第二ケース=あなたはimplictly変換の一環として切り捨てint型、(フロア値)にキャストしている

第三の場合は=あなたはまったく何もキャストしていない、とDATEDIFF()は(天井値)

ソリューション切り上げ署名int型、返す:あなたがやりたいが、あなたのコード全体で一貫したそれを維持します。

+0

あなたの返信ありがとうございます。天井値への丸めの振る舞いで問題はありません。 しかし、私はこれを試してみると、ラウンド(datediff(dd、 '1935-12-07'、 '2010-03-02')/ 365.00,0)を選択しても、私はまだ74を取得します。 yy '。 それは私の質問は何ですか? –

1

あなたがを指定した日付部分の違いのためdatediff機能をチェックし、それは二つの日付の年の部分の違いを言うには正しいが75

またはWordにそれのようになりマイクロソフトの人々は、それはそのdatepartの横断された境界の数を数えます。あなたの例では、2つの日付の間に75の年境界があります。

this msdnページをご覧ください。これは動作する方法を説明しています。

関連する問題