2017-02-13 1 views
3

kennt jemand die Abfrage, um Daten vom ersten Tag des Monats bis gestern zu bekommen? Ich versuche Abfrage unten verwenden, aber das Problem ist, wenn heute der erste Tag des Monats ist, so dass der Wert zwischen 20170201 und 20170131Wie bekomme ich Daten vom ersten Tag des Monats bis gestern?

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

Ex geworden: wenn heute 2017.01.02 ist möchte ich die Daten auszuwählen, vom 01-01-2017 bis 31-01-2017, aber wenn heute 13-02-2017 ist, möchte ich die Daten vom 01-02-2017 bis 12-02-2017 auswählen, danke vor

+1

Für den Anfang machen Sie "Zeichenarithmetik"; Sie sollten Datumsarithmetik durchführen. – BobC

+0

Was soll in diesem Randfall passieren? –

Antwort

1

Diese Frage hat wurde mit Ihrer neuen Logik aktualisiert. Die Abfrage unter Aufzeichnungen unter den folgenden Bedingungen behalten:

  • someDate fällt zwischen dem ersten Tag und gestern des aktuellen Monats oder
  • someDate, wenn heute der erste Tag des Monats ist, fällt überall auf der vorherigen
  • Monate


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 

Diese Abfrage wird davon ausgegangen, dass Sie einehabenSpalte genannt someDate.

+0

Entschuldigung Sir, ich denke meine Frage ist falsch, ich habe meine Frage bearbeitet, aber das ist auch nützlich, danke –

Verwandte Themen