0

私は SQL Server を使用していますが、私の場合の問題を 1 つだけ特定しました。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

「dd」を指定して DATEDIFF を実行すると、74/74.28 という差が得られます。しかし、「yy」と一緒に使用すると、差は 75 になります。

なぜそうなのか?ほぼ 74 に近いのに、なぜ差が 75 になったのかを意味します。

この両方の機能が異なる場合に必要です。しかし、動作が異なるため、多くの問題に直面しています。

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

ありがとう。

4

2 に答える 2

1

最初のケース = 暗黙的にフロートにキャストしており、正しい結果を示しています

2 番目のケース = 変換の一部として切り捨てられる int に暗黙的にキャストしている (フロア値)

3 番目のケース = 何もキャストせず、DATEDIFF()四捨五入した signed int を返します (上限値)

解決策: やりたいことは何でもしますが、コード全体で一貫性を保ちます。

于 2012-04-10T05:03:44.067 に答える
1

この関数は、指定した日付部分datediffの違いをチェックするため、2 つの日付の年の部分の違いは 75 であると言えます。

または、マイクロソフトの人々が行うように、その日付部分の境界を越えた数をカウントします。この例では、2 つの日付の間に 75 年の境界が交差しています。

このmsdn ページを見てください。どのように機能するかが説明されています。

于 2012-04-10T05:03:57.737 に答える