sql pgsql Come trovi i risultati avvenuti la scorsa settimana?



postgres subtract days from date (3)

Che matematica hai provato?

Questo dovrebbe funzionare

select * from books where current_date - integer '7'

Tratto da funzioni e operatori di data / ora di PostgreSQL

Ho una tabella di books con una colonna return_date. Mi piacerebbe vedere i risultati di tutti i libri con una data di ritorno avvenuta nella settimana passata.

qualche idea? Ho provato a fare un po 'di matematica, ma Postgres non era soddisfatto del mio tentativo.


Answer #1

Vuoi usare interval e current_date :

select * from books where returned_date > current_date - interval '7 days'

Ciò restituirebbe i dati della settimana passata incluso oggi.

Ecco di più su come lavorare con le date in Postgres.


Answer #2

Più semplice e corretto:

SELECT * FROM books WHERE returned_date > now()::date - 7
  • now()::date è l'implementazione di Postgres dello standard SQL CURRENT_DATE . Entrambi fanno esattamente lo stesso in PostgreSQL. Sto solo dimostrando.

  • now()::date - 7 funziona perché uno può sottrarre / aggiungere valori integer (= giorni) da / a una date . Un numero non quotato come 7 è un valore letterale numerico predefinito per integer mentre contiene solo cifre e un segno guida opzionale, quindi non è necessario un cast esplicito.

    Puoi anche operare con un interval , ma questo è più semplice e veloce per la date . Con il timestamp tipo di dati , dovresti aggiungere / sottrarre un interval , come dimostra @Eric.

  • Il calcolo è indipendente dal tipo di dati effettivo di returned_date , il tipo risultante a destra dell'operatore sarà forzato per corrispondere in entrambi i modi (e generare un errore se non viene registrato il cast).

  • Per la " settimana passata ":
    Per includerlo oggi , > current_date - 7 o >= current_date - 6 .
    Per escludere oggi , BETWEEN current_date - 7 AND current_date - 1 (o simile). >= current_date - 7 come altre risposte suggeriscono le righe di ritorno per gli ultimi 8 giorni invece di 7 ed è sbagliato, in senso stretto.





date-arithmetic