3

SQL は私の得意分野ではありませんが、なぜこれが機能しないのかわかりません。値に基づいて別の AND ステートメントを実行したいだけです。具体的には、foo is = 0の場合、dateDiff関数のdatePartを変更したい

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1,
CASE WHEN foo = 0
        AND dateDiff(dd, getDate(), 2 ) < test
ELSE
        AND dateDiff(hh, getDate(), 2 ) < test
END
4

3 に答える 3

8

これを試してみてください -

SELECT foo,
       bar,
       test
FROM [table]
WHERE bar = 1
    AND (
            (
                foo = 0 
                AND 
                DATEDIFF(dd, GETDATE(), 2 ) < test
            )
        OR  
            DATEDIFF(hh, GETDATE(), 2 ) < test
        )
于 2013-07-03T06:35:42.283 に答える
5

このように試すことができます

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1 And
(CASE WHEN foo = 0
    then   dateDiff(dd, getDate(), 2 )
ELSE
       dateDiff(hh, getDate(), 2 ) 
END)<test
于 2013-07-03T06:36:23.027 に答える
5

あなたが実際に何を目指しているのかを推測しなければならないとしたら、それGETDATE()はあなたが比較に使用するために から 2 時間または 2 日を差し引きたかったということです。

ここにあなたが目指していると思うものがあります:

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1 AND
(
   (foo = 0 AND DATEADD(day,-2, GETDATE()) < test)
   OR
   (foo<>0 AND DATEADD(hour,-2,GETDATE()) < test)
)

DATEDIFFあなたが本当にそれらの電話を意図していたとは思えません。たとえば、今日 (2013 年 7 月 3 日) の場合、この式は次のようになります。

select CAST(DATEDIFF(dd,getdate(),2) as datetime)

1786-07-031を生成します。testそれが でdatetimeあり、暗黙の変換が実行されていると想定しています。そうでない場合でも、 の数値は常に大きな負の数になります ( 20 世紀より前の値を返すDATEDIFF(dd,getdate(),2)マシンで実行されない限り、または実行されるまで)GETDATE()


1奇妙なことに、7 月 3 日は、結果が同じ月と日の番号を持つ唯一の日だと思います。

于 2013-07-03T06:56:38.000 に答える