

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Tipos de datetime
<a name="r_Datetime_types"></a>

**Topics**
+ [Armazenamento e intervalos](#r_Datetime_types-storage-and-ranges)
+ [DATE](#r_Datetime_types-date)
+ [TIME](#r_Datetime_types-time)
+ [TIMETZ](#r_Datetime_types-timetz)
+ [TIMESTAMP](#r_Datetime_types-timestamp)
+ [TIMESTAMPTZ](#r_Datetime_types-timestamptz)
+ [Exemplos com tipos de datetime](r_Examples_with_datetime_types.md)
+ [Literais de data, hora e timestamp](r_Date_and_time_literals.md)
+ [Tipos de dados e literais de intervalo](r_interval_data_types.md)

Os tipos de dados de data e hora incluem DATE, TIME, TIMETZ, TIMESTAMP e TIMESTAMPTZ.

## Armazenamento e intervalos
<a name="r_Datetime_types-storage-and-ranges"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_Datetime_types.html)

## DATE
<a name="r_Datetime_types-date"></a>

Use o tipo de dados DATE para armazenar datas de calendário simples sem timestamps.

## TIME
<a name="r_Datetime_types-time"></a>

TIME é um alias de TIME WITHOUT TIME ZONE.

Use o tipo de dados TIME para armazenar a hora do dia. 

As colunas TIME armazenam valores com até um máximo de seis dígitos de precisão para segundos fracionários.

Por padrão, os valores de TIME são Tempo Universal Coordenado (UTC) nas tabelas do usuário e nas tabelas do sistema Amazon Redshift. 

## TIMETZ
<a name="r_Datetime_types-timetz"></a>

TIMETZ é um alias de TIME WITH TIME ZONE.

Use o tipo de dados TIMETZ para armazenar a hora do dia com um fuso horário. 

As colunas TIMETZ armazenam valores com até um máximo de seis dígitos de precisão para segundos fracionários.

Por padrão, os valores de TIMETZ são UTC nas tabelas de usuário e nas tabelas de sistema do Amazon Redshift. 

## TIMESTAMP
<a name="r_Datetime_types-timestamp"></a>

TIMESTAMP é um alias de TIMESTAMP SEM FUSO HORÁRIO.

Use o tipo de dados TIMESTAMP para armazenar valores completos de registro de data e hora que incluem a data e a hora do dia. 

As colunas TIMESTAMP armazenam valores com até um máximo de seis dígitos de precisão para segundos fracionários.

Se você inserir uma data em uma coluna TIMESTAMP ou uma data com um valor de timestamp parcial, o valor será convertido implicitamente em um valor de timestamp completo. Esse valor de timestamp completo tem valores padrão (00) para horas, minutos e segundos ausentes. Os valores de fuso horário nas strings de entrada são ignorados.

Por padrão, os valores de TIMESTAMP são UTC nas tabelas de usuário e nas tabelas de sistema do Amazon Redshift. 

## TIMESTAMPTZ
<a name="r_Datetime_types-timestamptz"></a>

TIMESTAMPTZ é um alias de TIMESTAMP COM FUSO HORÁRIO.

Use o tipo de dados TIMESTAMPTZ para inserir valores de registro de data e hora completos que incluem a data, a hora do dia e um fuso horário. Quando um valor de entrada inclui um fuso horário, o Amazon Redshift usa o fuso horário para converter o valor em UTC e armazena o valor UTC.

Para visualizar uma lista de nomes de fusos horários compatíveis, execute o comando a seguir. 

```
select pg_timezone_names();
```

 Para visualizar uma lista de abreviações de fusos horários compatíveis, execute o comando a seguir. 

```
select pg_timezone_abbrevs();
```

Você também pode encontrar informações atuais sobre fusos horários no [Banco de dados de fuso horário de IANA](https://www.iana.org/time-zones).

A tabela a seguir tem exemplos de formatos de fuso horário. 


| Formato | Exemplo | 
| --- | --- | 
|  dd mon hh:mi:ss yyyy tz  |  17 Dez 07:37:16 1997 PST   | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 PST  | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 EUA/Pacífico  | 
|  yyyy-mm-dd hh:mi:ss\$1/-tz  |  1997-12-17 07:37:16-08   | 
| dd.mm.yyyy hh:mi:ss tz |  17.12.1997 07:37:16.00 PST  | 

As colunas TIMESTAMPTZ armazenam valores com até um máximo de seis dígitos de precisão para segundos fracionários.

Se você inserir uma data em uma coluna TIMESTAMPTZ, ou uma data com um timestamp parcial, o valor será convertido implicitamente em um valor de timestamp completo. Esse valor de timestamp completo tem valores padrão (00) para horas, minutos e segundos ausentes.

Os valores TIMESTAMPTZ são em UTC em tabelas de usuário.

# Exemplos com tipos de datetime
<a name="r_Examples_with_datetime_types"></a>

A seguir, você encontrará exemplos para trabalhar com tipos de data e hora compatíveis com o Amazon Redshift.

## Exemplos de data
<a name="r_Examples_with_datetime_types-date-examples"></a>

Os exemplos a seguir inserem datas que possuem formatos diferentes e exibem a saída. 

```
create table datetable (start_date date, end_date date);
```

```
insert into datetable values ('2008-06-01','2008-12-31');

insert into datetable values ('Jun 1,2008','20081231');
```

```
select * from datetable order by 1;

start_date |  end_date
-----------------------
2008-06-01 | 2008-12-31
2008-06-01 | 2008-12-31
```

Se você inserir um valor de timestamp em uma coluna DATE, a parte da hora será ignorada e apenas a data será carregada.

## Exemplos de tempo
<a name="r_Examples_with_datetime_types-time-examples"></a>

Os exemplos a seguir inserem os valores TIME e TIMETZ com formatos diferentes e exibem a saída.

```
create table timetable (start_time time, end_time timetz);
```

```
insert into timetable values ('19:11:19','20:41:19 UTC');
insert into timetable values ('191119', '204119 UTC');
```

```
select * from timetable order by 1;
start_time |  end_time
------------------------
 19:11:19  | 20:41:19+00
 19:11:19  | 20:41:19+00
```

## Exemplos de time stamp
<a name="r_Examples_with_datetime_types-timestamp-examples"></a>

Se você inserir uma data em uma coluna TIMESTAMP ou TIMESTAMPTZ, a hora é revertida para meia-noite. Por exemplo, se você inserir o literal `20081231`, o valor armazenado será `2008-12-31 00:00:00`. 

Para alterar o fuso horário da sessão atual, use o comando [SET](r_SET.md) para definir o parâmetro de configuração [timezone](r_timezone_config.md).

O exemplo a seguir insere carimbos de data e hora com formatos diferentes e exibem a tabela resultante. 

```
create table tstamp(timeofday timestamp, timeofdaytz timestamptz);

insert into tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

SELECT * FROM tstamp;

+---------------------+------------------------+
|      timeofday      |      timeofdaytz       |
+---------------------+------------------------+
| 2008-06-01 09:59:59 | 2008-06-01 14:59:59+00 |
| 2008-12-31 18:20:00 | 2008-12-31 18:20:00+00 |
| 2008-06-01 09:59:59 | 2008-06-01 09:59:59+00 |
+---------------------+------------------------+
```

# Literais de data, hora e timestamp
<a name="r_Date_and_time_literals"></a>

A seguir, estão as regras para trabalhar com literais de data, hora e timestamp compatíveis com o Amazon Redshift. 

## Datas
<a name="r_Date_and_time_literals-dates"></a>

As datas de entrada a seguir são exemplos válidos de valores de data literais que você pode carregar nas tabelas do Amazon Redshift. O modo `MDY DateStyle` é considerado em vigor. Este modo significa que o valor do mês precede o valor do dia em strings tais como `1999-01-08` e `01/02/00`. 

**nota**  
Um literal de data ou timestamp deve ser colocado entre aspas ao carregá-lo em uma tabela.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_Date_and_time_literals.html)

## Times
<a name="r_Date_and_time_literals-times"></a>

Os tempos de entrada a seguir são exemplos válidos de valores de tempo literais para os tipos de dados TIME e TIMETZ que você pode carregar nas tabelas do Amazon Redshift. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_Date_and_time_literals.html)

## Carimbos de data/hora
<a name="r_Date_and_time_literals-timestamps"></a>

Os carimbos de data e hora de entrada a seguir são exemplos válidos de valores de tempo literais para os tipos de dados TIMESTAMP e TIMESTAMPTZ que você pode carregar nas tabelas do Amazon Redshift. Todos os literais de data válidos podem ser combinados com os seguintes literais de hora. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_Date_and_time_literals.html)

## Valores especiais de datetime
<a name="r_Date_and_time_literals-special-datetime-values"></a>

Os seguintes valores especiais podem ser usados como literais de data e hora e como argumentos para funções de data. Eles exigem aspas simples e são convertidos em valores de timestamp regulares durante o processamento da consulta. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_Date_and_time_literals.html)

Os exemplos a seguir mostram como `now` e `today` trabalham com a função DATEADD.

```
select dateadd(day,1,'today');

date_add
---------------------
2009-11-17 00:00:00
(1 row)

select dateadd(day,1,'now');

date_add
----------------------------
2009-11-17 10:45:32.021394
(1 row)
```

# Tipos de dados e literais de intervalo
<a name="r_interval_data_types"></a>

Você pode usar um tipo de dados de intervalo para armazenar espaços de tempo em unidades como `seconds`, `minutes`, `hours`, `days`, `months` e `years`. Tipos de dados e literais de intervalo podem ser usados em cálculos de data e hora, como adicionar intervalos a datas e carimbos de data e hora, somar intervalos e subtrair um intervalo de uma data ou carimbo de data e hora. Os literais de intervalo podem ser usados como valores de entrada para colunas de tipo de dados de intervalo em uma tabela. 

## Sintaxe do tipo de dados de intervalo
<a name="r_interval_data_types-syntax"></a>

Para especificar um tipo de dados de intervalo para armazenar um espaço de tempo em anos e meses:

```
INTERVAL year_to_month_qualifier
```

Para especificar um tipo de dados de intervalo para armazenar uma duração em dias, horas, minutos e segundos:

```
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
```

## Sintaxe de literal de intervalo
<a name="r_interval_data_types-syntax-literal"></a>

Para especificar um literal de intervalo para definir um espaço de tempo em anos e meses:

```
INTERVAL quoted-string year_to_month_qualifier
```

Para especificar um literal de intervalo para definir uma duração em dias, horas, minutos e segundos:

```
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
```

## Argumentos
<a name="r_interval_data_types-arguments"></a>

 *quoted-string*   
Determina um valor numérico positivo ou negativo especificando uma quantidade e a unidade de data e hora como uma string de entrada. Se *quoted-string* contiver apenas um valor numérico, o Amazon Redshift determinará as unidades de *year\$1to\$1month\$1qualifier* ou *day\$1to\$1second\$1qualifier*. Por exemplo, `'23' MONTH` representa `1 year 11 months`, `'-2' DAY` representa `-2 days 0 hours 0 minutes 0.0 seconds`, `'1-2' MONTH` representa `1 year 2 months` e `'13 day 1 hour 1 minute 1.123 seconds' SECOND` representa `13 days 1 hour 1 minute 1.123 seconds`. Para obter mais informações sobre formatos de saída de um intervalo, consulte [Estilos de intervalo](#r_interval_data_types-interval-styles).

 *year\$1to\$1month\$1qualifier*   
Especifica a faixa do intervalo. Se você usar um qualificador e criar um intervalo com unidades de tempo menores do que o qualificador, o Amazon Redshift truncará e descartará as partes menores do intervalo. Os valores válidos para *year\$1to\$1month\$1qualifier* são:  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
Especifica a faixa do intervalo. Se você usar um qualificador e criar um intervalo com unidades de tempo menores do que o qualificador, o Amazon Redshift truncará e descartará as partes menores do intervalo. Os valores válidos para *year\$1to\$1month\$1qualifier* são:  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
A saída do literal INTERVAL é truncada no menor componente INTERVAL especificado. Por exemplo, ao usar um qualificador MINUTE, o Amazon Redshift descarta as unidades de tempo menores do que MINUTE.  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
O valor resultante é truncado para `'1 day 01:01:00'`.

 *fractional\$1precision*   
Parâmetro opcional que especifica o número de dígitos fracionários permitidos no intervalo. O argumento *fractional\$1precision* só deverá ser especificado se seu intervalo contiver SECOND. Por exemplo, `SECOND(3)` cria um intervalo que permite somente três dígitos fracionários, como 1.234 segundos. O número máximo de dígitos fracionários é seis.

A configuração da sessão `interval_forbid_composite_literals` determina se um erro é retornado quando um intervalo é especificado com as partes YEAR TO MONTH e DAY TO SECOND. Para obter mais informações, consulte [interval\$1forbid\$1composite\$1literals](r_interval_forbid_composite_literals.md).

## Operações aritméticas de intervalo
<a name="r_interval_data_types-arithmetic"></a>

É possível usar valores de intervalo com outros valores de data e hora para realizar operações aritméticas. As tabelas a seguir descrevem as operações disponíveis e qual tipo de dados resulta de cada operação. 

**nota**  
 As operações que podem produzir resultados `date` e `timestamp` o fazem com base na menor unidade de tempo incluída na equação. Por exemplo, quando você adiciona `interval` a `date`, o resultado é `date`, se for um intervalo de YEAR TO MONTH, e um carimbo de data e hora, se for um intervalo de DAY TO SECOND. 

As operações em que o primeiro operando é um `interval` produzem os seguintes resultados para o segundo operando fornecido:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_interval_data_types.html)

As operações em que o primeiro operando é um `date` produzem os seguintes resultados para o segundo operando fornecido:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_interval_data_types.html)

As operações em que o primeiro operando é um `timestamp` produzem os seguintes resultados para o segundo operando fornecido:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/redshift/latest/dg/r_interval_data_types.html)

## Estilos de intervalo
<a name="r_interval_data_types-interval-styles"></a>

É possível usar o comando SQL [SET](r_SET.md) para alterar o formato de exibição da saída dos valores do intervalo. Ao usar o tipo de dados de intervalo no SQL, converta-o em texto para ver o estilo de intervalo esperado; por exemplo, `YEAR TO MONTH::text`. Os valores disponíveis para DEFINIR o valor `IntervalStyle` são:
+ `postgres`: segue o estilo do PostgreSQL. Esse é o padrão.
+ `postgres_verbose`: segue o estilo detalhado do PostgreSQL.
+ `sql_standard`: segue o estilo de literais de intervalo padrão do SQL.

O comando a seguir define o estilo de intervalo como `sql_standard`.

```
SET IntervalStyle to 'sql_standard';
```

**formato de saída postgres**

Veja abaixo o formato de saída para o estilo de intervalo `postgres`. Cada valor numérico pode ser negativo.

```
'<numeric> <unit> [, <numeric> <unit> ...]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
---------------
1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
------------------
1 day 02:03:04.5678
```

**formato de saída postgres\$1verbose**

A sintaxe postgres\$1verbose é semelhante à do postgres, mas as saídas do postgres\$1verbose também contêm a unidade de tempo.

```
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
-----------------
@ 1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
---------------------------
@ 1 day 2 hours 3 mins 4.56 secs
```

**formato de saída sql\$1standard**

Os valores do intervalo de ano para mês são formatados da maneira a seguir. Especificar um sinal negativo antes do intervalo indica que o intervalo é um valor negativo e se aplica a todo o intervalo.

```
'[-]yy-mm'
```

Os valores do intervalo de dia para segundo são formatados da maneira a seguir.

```
'[-]dd hh:mm:ss.ffffff'
```

```
SELECT INTERVAL '1-2' YEAR TO MONTH::text 
  
varchar   
-------
1-2
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text 

varchar
---------------
1 2:03:04.5678
```

## Exemplos do tipo de dados de intervalo
<a name="r_interval_data_types-examples"></a>

Os exemplos a seguir demonstram como usar tipos de dados INTERVAL com tabelas.

```
create table sample_intervals (y2m interval month, h2m interval hour to minute);
insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second);
select y2m::text, h2m::text from sample_intervals;


      y2m      |       h2m      
---------------+-----------------
 1 year 8 mons | 2 days 01:01:00
```

```
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month;
select * from sample_intervals;

   y2m   |       h2m       
---------+-----------------
 2 years | 2 days 01:01:00
```

```
delete from sample_intervals where h2m = interval '2 1:1:0' day to second;
select * from sample_intervals;

 y2m | h2m 
-----+-----
```

## Exemplos de literais de intervalo
<a name="r_interval_data_types_literals-examples"></a>

Os exemplos a seguir são executados com o estilo de intervalo definido como `postgres`.

O exemplo a seguir demonstra como criar um literal INTERVAL de um ano.

```
select INTERVAL '1' YEAR 

intervaly2m
---------------
1 years 0 mons
```

Se você especificar um *quoted-string* que exceda o qualificador, as unidades de tempo restantes serão truncadas do intervalo. No exemplo a seguir, um intervalo de 13 meses se torna um ano e um mês, mas o mês restante é omitido devido ao qualificador YEAR.

```
select INTERVAL '13 months' YEAR

intervaly2m
---------------
1 years 0 mons
```

Se você usar um qualificador inferior à string de intervalo, as unidades restantes serão incluídas.

```
select INTERVAL '13 months' MONTH

intervaly2m
---------------
1 years 1 mons
```

Especificar uma precisão no intervalo trunca o número de dígitos fracionários até a precisão especificada.

```
select INTERVAL '1.234567' SECOND (3)

intervald2s
--------------------------------
0 days 0 hours 0 mins 1.235 secs
```

Se você não especificar uma precisão, o Amazon Redshift usará a precisão máxima de seis.

```
select INTERVAL '1.23456789' SECOND

intervald2s
-----------------------------------
0 days 0 hours 0 mins 1.234567 secs
```

O exemplo a seguir demonstra como criar um intervalo em faixas.

```
select INTERVAL '2:2' MINUTE TO SECOND

intervald2s
------------------------------
0 days 0 hours 2 mins 2.0 secs
```

Os qualificadores ditam as unidades que você está especificando. Por exemplo, embora o exemplo a seguir use o mesmo *quoted-string* de ‘2:2’ do exemplo anterior, o Amazon Redshift reconhece que ele usa unidades de tempo diferentes por causa do qualificador.

```
select INTERVAL '2:2' HOUR TO MINUTE

intervald2s
------------------------------
0 days 2 hours 2 mins 0.0 secs
```

Abreviações e plurais de cada unidade também são aceitos. Por exemplo, `5s`, `5 second` e `5 seconds` são intervalos equivalentes. As unidades aceitas são anos, meses, horas, minutos e segundos.

```
select INTERVAL '5s' SECOND

intervald2s
------------------------------
0 days 0 hours 0 mins 5.0 secs
```

```
select INTERVAL '5 HOURS' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

```
select INTERVAL '5 h' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

# Exemplos de literais de intervalo sem sintaxe de qualificador
<a name="r_interval_literals"></a>

**nota**  
Os exemplos a seguir demonstram o uso de um literal de intervalo sem um qualificador `YEAR TO MONTH` ou `DAY TO SECOND`. Para obter informações sobre como usar o literal de intervalo recomendado com um qualificador, consulte [Tipos de dados e literais de intervalo](r_interval_data_types.md).

Use um literal de intervalo para identificar períodos de tempo específicos, tais como `12 hours` ou `6 months`. Você pode usar esses literais de intervalo em condições e cálculos que envolvem expressões de data e hora. 

 Um literal de intervalo é expresso como uma combinação da palavra-chave de INTERVAL com uma quantidade numérica e uma parte da data compatível; por exemplo `INTERVAL '7 days'` ou `INTERVAL '59 minutes'`. Você pode conectar várias quantidades e unidades para formar um intervalo mais preciso, por exemplo: `INTERVAL '7 days, 3 hours, 59 minutes'`. As abreviaturas e os plurais de cada unidade também são compatíveis; por exemplo: `5 s`, `5 second` e `5 seconds` são intervalos equivalentes.

Se você não especificar uma parte da data, o valor do intervalo representará os segundos. Você pode especificar o valor de quantidade como uma fração (por exemplo: `0.5 days`).

Os exemplos a seguir mostram uma série de cálculos com diferentes valores de intervalo.

O exemplo a seguir adiciona 1 segundo à data especificada.

```
select caldate + interval '1 second' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:00:01
(1 row)
```

O exemplo a seguir adiciona 1 minuto à data especificada.

```
select caldate + interval '1 minute' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:01:00
(1 row)
```

O exemplo a seguir adiciona 3 horas e 35 minutos à data especificada.

```
select caldate + interval '3 hours, 35 minutes' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 03:35:00
(1 row)
```

O exemplo a seguir adiciona 52 semanas à data especificada.

```
select caldate + interval '52 weeks' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-12-30 00:00:00
(1 row)
```

O seguinte adiciona 1 semana, 1 hora, 1 minuto e 1 segundo à data especificada.

```
select caldate + interval '1w, 1h, 1m, 1s' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-01-07 01:01:01
(1 row)
```

O exemplo a seguir adiciona 12 horas (meio dia) à data especificada.

```
select caldate + interval '0.5 days' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 12:00:00
(1 row)
```

O exemplo a seguir subtrai quatro meses de 15 de fevereiro de 2023 e o resultado é 15 de outubro de 2022.

```
select date '2023-02-15' - interval '4 months';

?column?
---------------------
2022-10-15 00:00:00
```

O exemplo a seguir subtrai quatro meses de 31 de março de 2023 e o resultado é 30 de novembro de 2022. O cálculo considera o número de dias em um mês.

```
select date '2023-03-31' - interval '4 months';

?column?
---------------------
2022-11-30 00:00:00
```