2016-07-05 23 views
-3

この私の関数であるFirstDayInQtrSelectステートメントのMSSQL

これは、私は、これはあなたの不確実性がクリアされますと信じてこの文を

+3

私たちはすべてそれを説明できると確信しています。あなたの質問は何ですか?それはあなたが期待しない出力を与えていますか?それが何かを見るためにいくつかのサンプルデータでテストしましたか? –

+0

はい私はそれをテストし、それは完全に動作します。私はこの声明の背後にある論理を理解できない –

答えて

0

DATEADD()関数は日付から指定された時間間隔を加算または減算します。

構文:DATEADD(日付要素、数字、日付)

qq = quarter, 

yy = Year 

あなたの質問に日付フィールドは0として代表的なものであるか、-1日付要素構文で、 SQLサーバは、1900年から1901年として0を関連-01 00:00:00.000 0 1899年12月31日00の前に1日として -1:00:00.000

よう

select dateadd(qq,466,'1900-01-01 00:00:00.000') is the same as 


SELECT DATEADD(qq, DATEDIFF(qq ,0, GETDATE()),0) 

OR 

SET @InsertDate = GETDATE() 

SELECT DATEADD(qq, DATEDIFF(qq ,0, @InsertDate),0) 

今、466は関数のdatediff(qq,0,GETDATE())セクションによって導出されます。カレンダー年によると、1900-01-01 00:00:00.000 の間に466のクォーターがあります。

ですので、@InsertDateの値が2016-07-05 00:00:00.000の場合は、でが得られます。

1

を説明することができ、SQLクエリ

SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0) 

です:https://stackoverflow.com/a/3945396/6492765

基本的に、SELECTは変数の値を設定するT-SQLの方法であり、魔法はセレクティブにありますgをジョインや他の選択概念から直接変数に変換する。唯一の1つの変数に1つの値を割り当てると、それはあなたのケースでは、となり、SET異ならない:あなたは、変数@dayに現在の四半期の最初の日を割り当てる

SET @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0) 
関連する問題