sql >> Base de Datos >  >> RDS >> PostgreSQL

Obtener el primer día del mes en PostgreSQL

Podemos usar el siguiente método en PostgreSQL para devolver el primer día de un mes determinado.

Puede ser el primer día del mes actual o el primer día del mes según una fecha que especifiquemos.

Obtener el primer día del mes nos permite realizar más cálculos en la fecha resultante, como agregar una cierta cantidad de días al comienzo del mes, etc.

Inicio del mes actual

Aquí hay un ejemplo que devuelve el primer día del mes actual:

SELECT date_trunc('month', now());

Resultado:

2022-04-01 00:00:00+10

Esto usa date_trunc() de PostgreSQL función para devolver los resultados que queremos. Esta función trunca un valor de fecha/hora con una precisión especificada.

En este caso uso el now() función para devolver la fecha actual y el 'month' argumento modifica esa fecha al comienzo del mes.

Podemos convertirlo en un valor de fecha si es necesario:

SELECT date_trunc('month', now())::date;

Resultado:

2022-04-01

Aquí está de nuevo, junto con la fecha real en la que ejecuté el ejemplo:

SELECT 
    now()::date AS "Current Date",
    date_trunc('month', now())::date AS "Start of Month";

Resultado:

+--------------+----------------+
| Current Date | Start of Month |
+--------------+----------------+
| 2022-04-09   | 2022-04-01     |
+--------------+----------------+

Inicio de un mes específico

No tiene que ser el comienzo del mes actual. Podemos especificar cualquier fecha y devolverá el inicio del mes, según esa fecha.

Ejemplo:

SELECT date_trunc('month', date '2030-07-14')::date;

Resultado:

2030-07-01

Luego podemos usar el resultado para realizar otras acciones en él. Por ejemplo, podemos agregar un número determinado de días al resultado de esta manera:

SELECT date_trunc('month', date '2030-07-14')::date + 20;

Resultado:

2030-07-21

Ejemplo de base de datos

Aquí hay un ejemplo que usa fechas de una base de datos:

SELECT
    rental_date,
    date_trunc('month', rental_date)::date AS "The 1st of the Month",
    date_trunc('month', rental_date)::date + 19 AS "The 20th of the Month"
FROM rental WHERE customer_id = 459 LIMIT 10;

Resultado:

+---------------------+----------------------+-----------------------+
|     rental_date     | The 1st of the Month | The 20th of the Month |
+---------------------+----------------------+-----------------------+
| 2005-05-24 22:54:33 | 2005-05-01           | 2005-05-20            |
| 2005-06-17 02:50:51 | 2005-06-01           | 2005-06-20            |
| 2005-06-17 09:38:22 | 2005-06-01           | 2005-06-20            |
| 2005-06-17 16:40:33 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 02:39:21 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 12:35:44 | 2005-06-01           | 2005-06-20            |
| 2005-06-20 12:42:00 | 2005-06-01           | 2005-06-20            |
| 2005-06-21 02:39:44 | 2005-06-01           | 2005-06-20            |
| 2005-07-06 00:22:29 | 2005-07-01           | 2005-07-20            |
| 2005-07-08 02:51:23 | 2005-07-01           | 2005-07-20            |
+---------------------+----------------------+-----------------------+