2017-05-30 18 views
0

現在の月に基づいてデータを取得する自動タスクをスケジュールしようとしています。難しいのは、毎月奇妙な日付(たとえば、01.15から02.17)を引き出す必要があることです。私は以下を試しましたが、私のBETWEENステートメントに問題があると言います。WHERE句のCASE文のBETWEENの問題

WHERE 
CASE WHEN 
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) = '2017-05' 
THEN 
CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23' 
+0

"01.15" と "02.17" である日のどのような?あなたがしようとしていることを明確にしてください。サンプルデータと望ましい結果が役立ちます。 –

+0

'WHERE'節で' case' _expressions_の代わりに 'AND' /' OR'を使う方が一般に良いでしょう。 – jarlh

答えて

1

のような化合物の論理式を使用できますが、ケースはそれを意味し、式であります単一のスカラー値を返し、このように使用することはできません。それも、case MSDN pageに述べています:

CASE式はのTransact-SQLステートメントは、ステートメント・ブロック、ユーザー定義関数、およびストアドプロシージャの実行の流れを制御するために使用することはできません。フローの制御方法の一覧については、フロー制御の言語(Transact-SQL)を参照してください。あなたが必要なもの

andorです:

WHERE 
(
    DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) = '2017-05-01' 
    AND CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23' 
) 
OR -- Here comes the part you would use for the `else` part of the case statement. 
0

あなたが代わりにあなたが(if..elseのような)フロー制御などのケース式を使用しようと

WHERE DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) = '2017-05-01' 
AND 
CAST(<here_is_the_date_column>) AS date) BETWEEN '2017-04-23' AND '2017-05-23' 
+1

なぜダウン投票?!? – jarlh

+2

DATEADD(MONTH、DATEDIFF(MONTH、0、GETDATE())、0)= '2017-05' ???部分的な日付は指定できません。あなたは1日も供給しなければなりません。 '2017-05-01'。それがなぜdownvoteです。 –

+1

@RachelAmbler、それはOPのポストにあり、さらにそれは私の答えのポイントではありません – Rahul