2017-02-13 14 views
3

昨日までの月の初日からデータを取得するクエリを知っている人は誰ですか?私は、下のクエリを使用してみてくださいが、値は例20170201と20170131昨日から昨日までのデータを取得する方法

select * from a where to_char(DATE,'yyyymmdd') BETWEEN to_char(sysdate,'yyyymm')||'01' and to_char(sysdate-1,'yyyymmdd') 

の間になるように、今日は、月の初日であるときに問題がある:今日は2017年1月2日である場合、私は、データを選択したいです01-01-2017から31-01-2017までですが、今日が13-02-2017の場合は01-02-2017から12-02-2017までのデータを選択します。

+1

まず、「文字の算術」を行います。あなたは日付計算をしているはずです。 – BobC

+0

このエッジケースではどうなりますか? –

答えて

1

この質問は新しいロジックで更新されました。今日は月の最初のときに、どこでも、前に落ち、現在の月の最初の日と昨日の間に入るsomeDate

  • 、または
  • someDate:以下のクエリは、以下の条件でレコードを保持します月


SELECT * 
FROM yourTable 
WHERE someDate BETWEEN CASE WHEN EXTRACT(DAY FROM SYSDATE) = 1 
          THEN TRUNC(SYSDATE-1, 'MONTH') 
          ELSE TRUNC(SYSDATE, 'MONTH') END AND 
         CASE WHEN EXTRACT(DAY FROM SYSDATE) = 1 
          THEN TRUNC(SYSDATE, 'MONTH') - 1 
          ELSE TRUNC(SYSDATE - 1) END 

このクエリでは、を持っていることを前提としてい列はsomeDateと呼ばれます。

+0

申し訳ありませんが、私の質問は間違っていると思います。私の質問を編集しましたが、これも便利です。ありがとう –

関連する問題