5

私はこれを使用しています

DECLARE @Year_Filter_Start AS DATETIME
SET @Year_Filter_Start = DATEADD( dd, -1, DATEADD( yy, DATEDIFF( yy, 0, GetDate() ), 0 ) )
DECLARE @Year_Filter_End AS DATETIME
SET @Year_Filter_End = GetDate()

INSERT INTO TABLE
  ( blah )
SELECT blah
  FROM OTHER_TABLE
 WHERE ACTISSUEDATE IS NULL 
    OR ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End

ACTISSUEDATE が null ではなく、ACTSTARTDATE が年始と今日の間にないレコードを返しています。@Year_Filter_Start は今年の始まり、@Year_Filter_End は今日のはずです。

例えば:

ACTSTARTDATE が 2010-08-02 で ACTISSUEDATE が 2011-03-15 のレコード

または、ACTSTARTDATE が 2009-05-18 で、ACTISSUEDATE が 2009-09-06 の場合

この発言に何か問題がありますか?

4

7 に答える 7

1

次のことを試してみてください。さらにいくつかの括弧が必要だと思います:

WHERE ((ACTISSUEDATE IS NULL)  
    OR (ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End))

エンジンは、これを 2 つのステートメントとして認識します。あなたはそれを一つにする必要があります。

于 2012-06-24T02:19:05.287 に答える
0

質問にSQLServer2005のタグを付けたようです。キーワード間はエンドポイントを含むことを指摘したいと思いますが、したがって、年の初めのみが必要な場合は、日付の計算を次のように変更する必要があります。

    DATEADD(yy, DATEDIFF(yy, 0, GetDate()), 0)

http://msdn.microsoft.com/en-us/library/ms187922.aspx

于 2012-07-17T19:47:20.247 に答える
0

whereは、2 つの条件のいずれかが の場合に値を返しますTrue。さて、あなたの例では、が ACTISSUEDATEnullではないことを伝えているので、日付の間にない場合でも、その値が返されACTSTARTDATEます。

両方の条件を満たすには、WHERE 句の OR を AND に変更します。

于 2012-06-21T13:11:11.170 に答える
0

Where句は

WHERE ACTISSUEDATE IS NULL OR (ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End)

于 2012-12-20T15:56:56.063 に答える
0

まず、両方の条件を true にするか、またはいずれかの条件を満たしますか?次に、ACTISSUEDATE が null ではないレコードを提供しています。これらのレコードには、年の開始と今日の間に ACTSTARTDATE があるためです。また、ACTSTARTDATE が年始と今日の間にないレコードでは、ACTISSUEDATE が NULL になっています。

OR ではなく AND になる場所を変更する

于 2012-06-21T12:28:12.023 に答える
0

NULLS が奇妙に処理されている可能性があります (サンプル データがないとわかりにくい)。

私は変更しようとします:

WHERE ACTISSUEDATE IS NULL 
OR ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End

に:

WHERE ISNULL(ACTISSUEDATE, @Year_Filter_End) BETWEEN @Year_Filter_Start AND @Year_Filter_End
于 2012-06-21T13:30:19.897 に答える
0

あなたのwhereクエリは

WHERE ACTISSUEDATE is null 
    OR (ACTISSUEDATE is not null 
    and ACTSTARTDATE BETWEEN @Year_Filter_Start AND @Year_Filter_End)

これがうまくいくことを願っています...

于 2013-01-22T08:14:29.943 に答える