2017-12-13 5 views
4

ファイアバードに問い合わせて、先月から1日目から最後の日(月によって30または31)までのデータを取得しようとしています。下のコードを使用すると、現在の日付から2010年11月14日、2014年12月13日などの日付がシフトされます。ファイアバードで最初の日から最後の日までのデータを取得する

コード:

WHERE DATE >= DATEADD(MONTH,-1, CURRENT_TIMESTAMP(2)) AND DATE<= 'TODAY' 

所望の出力は、2017年11月1日である - 2017年11月30日

それを行うための正しい方法は何ですか?

答えて

3

私は火の鳥を使用していないが、私はかなり広範囲のPostgreSQLを使用していると私は、これは動作するはずだと思う: CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1がで今月とdateaddの最初に戻るべき

WHERE 
    DATE BETWEEN dateadd(month, -1, CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1) 
    AND CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) 

説明 - 1ヶ月前の月にそれを取る必要があります。あなたがCURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE)の間、つまり言い換えれば2013年12月13日の場合、11月の最後の日であるはずの13日。私の指を渡す。がんばろう。

+2

Firebirdの場合、 'addmonth'の代わりに[' dateadd(-1、month、...) '](https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/)を使用してください。 fblangref25-functions-scalarfuncs.html#fblangref25-functions-scalarfuncs-dateadd)(または 'dateadd(-1ヶ月〜...)') –

+0

こんにちは。完璧!私の必要と同じように機能しました。どうもありがとう ! :) –

+1

そして私は、私のコメントにコンマ区切りの変種の引数の順序が間違っていることに気付きました。あなたはそれが正しいと思えます;)1つのわずかな「問題」は、タイムスタンプを比較するときです。現在の時刻を使用します(したがって、2017-11-01 21:06 - 2017-11-30 21:06、00:00 - 23 :59) –

関連する問題