

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tipos de fecha y hora
<a name="Datetime_types"></a>

Los tipos de datos de fecha y hora incluyen DATE, TIME, TIMESTAMP\$1LTZ y TIMESTAMP\$1NTZ.

**Topics**
+ [DATE](Datetime_types-date.md)
+ [TIMESTAMP\$1LTZ](Datetime_types-timestamp_LTZ.md)
+ [TIMESTAMP\$1NTZ](Datetime_types-TIMESTAMP_NTZ.md)
+ [Ejemplos con tipos de fecha y hora](Examples_with_datetime_types.md)
+ [Literales de fecha, hora y marca temporal](Date_and_time_literals.md)
+ [Literales de intervalo](Interval_literals.md)
+ [Literales y tipos de datos de intervalo](interval_data_types_spark.md)

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

Utilice el tipo de datos DATE para almacenar fechas de calendario simples sin marcas temporales.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/Datetime_types-date.html)

# TIMESTAMP\$1LTZ
<a name="Datetime_types-timestamp_LTZ"></a>

Usa el tipo de datos TIMESTAMP\$1LTZ para almacenar valores de marca de tiempo completos que incluyan la fecha, la hora del día y la zona horaria local. 

TIMESTAMP representa valores compuestos por los valores de los campos`year`,,, y `month` `day``hour`, `minute` con la zona horaria local de la sesión. `second` El `timestamp` valor representa un punto absoluto en el tiempo.

TIMESTAMP en Spark es un alias especificado por el usuario asociado a una de las variantes TIMESTAMP\$1LTZ y TIMESTAMP\$1NTZ. Puedes establecer el tipo de marca de tiempo predeterminado como TIMESTAMP\$1LTZ (valor predeterminado) o TIMESTAMP\$1NTZ a través de la configuración. `spark.sql.timestampType`

# TIMESTAMP\$1NTZ
<a name="Datetime_types-TIMESTAMP_NTZ"></a>

Utilice el tipo de datos TIMESTAMP\$1NTZ para almacenar valores de marca de tiempo completos que incluyan la fecha y la hora del día, sin incluir la zona horaria local. 

TIMESTAMP representa valores compuestos por los valores de los campos,,, y. `year` `month` `day` `hour` `minute` `second` Todas las operaciones se realizan sin tener en cuenta ninguna zona horaria.

TIMESTAMP en Spark es un alias especificado por el usuario asociado a una de las variantes TIMESTAMP\$1LTZ y TIMESTAMP\$1NTZ. Puedes establecer el tipo de marca de tiempo predeterminado como TIMESTAMP\$1LTZ (valor predeterminado) o TIMESTAMP\$1NTZ a través de la configuración. `spark.sql.timestampType`

# Ejemplos con tipos de fecha y hora
<a name="Examples_with_datetime_types"></a>

En los siguientes ejemplos se muestra cómo usar los tipos de fecha y hora que se admiten en AWS Clean Rooms.

## Ejemplos de fecha
<a name="Examples_with_datetime_types-date-examples"></a>

Los siguientes ejemplos insertan fechas que tienen diferentes formatos y muestran la salida. 

```
select * from datetable order by 1;

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

Si inserta un valor de marca temporal en una columna DATE, se ignora la parte de la hora y solo se carga la fecha.

## Ejemplos de tiempo
<a name="Examples_with_datetime_types-time-examples"></a>

Los siguientes ejemplos insertan los valores TIME y TIMETZ que tienen diferentes formatos y muestran la salida.

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

# Literales de fecha, hora y marca temporal
<a name="Date_and_time_literals"></a>

Las siguientes son las reglas para trabajar con literales de fecha, hora y marca horaria compatibles con Spark SQL. AWS Clean Rooms 

## Fechas
<a name="Date_and_time_literals-dates"></a>

La siguiente tabla muestra las fechas de entrada que son ejemplos válidos de valores de fecha literales que puedes cargar en tablas. AWS Clean Rooms Se supone que el modo predeterminado `MDY DateStyle` está en vigor. Este modo significa que el valor del mes precede al valor del día en las cadenas, como `1999-01-08` y `01/02/00`. 

**nota**  
Un literal de marca temporal o fecha debe encerrarse entre comillas cuando lo carga a la tabla.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

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

En la siguiente tabla se muestran las horas de entrada que son ejemplos válidos de valores de hora literales que se pueden cargar en AWS Clean Rooms las tablas. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

## Valores de fecha y hora especiales
<a name="Date_and_time_literals-special-datetime-values"></a>

La siguiente tabla muestra valores especiales que se pueden usar como literales de fecha y hora y como argumentos para funciones de fecha. Requieren comillas simples y se convierten en valores de marca temporal regulares durante el procesamiento de consultas. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/Date_and_time_literals.html)

Los siguientes ejemplos muestran cómo `today` funciona `now` la función DATE\$1ADD.

```
select date_add('today', 1);

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

select date_add('now', 1);

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

# Literales de intervalo
<a name="Interval_literals"></a>

A continuación, se muestran las reglas para trabajar con literales de intervalo compatibles con AWS Clean Rooms Spark SQL.

Use un literal de intervalo para identificar períodos específicos de tiempo, como `12 hours` o `6 weeks`. Puede usar estos literales de intervalo en condiciones y cálculos que involucran expresiones de fecha y hora. 

**nota**  
No puedes usar el tipo de datos INTERVAL para las columnas de las AWS Clean Rooms tablas.

 Un intervalo se expresa como una combinación de la palabra clave INTERVAL con una cantidad numérica y una parte de fecha compatible, por ejemplo, `INTERVAL '7 days'` o `INTERVAL '59 minutes'`. Puede conectar varias cantidades y unidades para formar un intervalo más preciso, por ejemplo: `INTERVAL '7 days, 3 hours, 59 minutes'`. También se admiten abreviaturas y plurales de cada unidad; por ejemplo: `5 s`, `5 second` y `5 seconds` son intervalos equivalentes.

Si no especifica una parte de fecha, el valor de intervalo representa segundos. Puede especificar el valor de cantidad como una fracción (por ejemplo: `0.5 days`).

## Ejemplos
<a name="section_interval-literals-examples"></a>

En los siguientes ejemplos se muestra una serie de cálculos con diferentes valores de intervalo.

En el siguiente ejemplo se agrega 1 segundo a la fecha especificada.

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

En el siguiente ejemplo se agrega 1 minuto a la fecha especificada.

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

En el siguiente ejemplo se agregan 3 horas y 35 minutos a la fecha 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)
```

En el siguiente ejemplo se agregan 52 semanas a la fecha especificada.

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

En el siguiente ejemplo se agrega 1 semana, 1 hora, 1 minuto y 1 segundo a la fecha 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)
```

En el siguiente ejemplo se agregan 12 horas (medio día) a la fecha 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)
```

En el siguiente ejemplo se restan 4 meses desde el 31 de marzo de 2023 y el resultado es el 30 de noviembre de 2022. El cálculo tiene en cuenta el número de días de un mes.

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

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



# Literales y tipos de datos de intervalo
<a name="interval_data_types_spark"></a>

Puede usar un tipo de datos de intervalo para almacenar duraciones de tiempo en unidades como `seconds`, `minutes`, `hours`, `days`, `months` y `years`. Los literales y los tipos de datos de intervalo se pueden usar en los cálculos de fecha y hora, por ejemplo, agregar intervalos a fechas y marcas temporales, sumar intervalos y restar un intervalo de una fecha o marca temporal. Los literales de intervalo se pueden usar como valores de entrada para las columnas de tipos de datos de intervalos de una tabla. 

## Sintaxis del tipo de datos de intervalo
<a name="interval_data_types-syntax"></a>

Para especificar un tipo de datos de intervalo para almacenar una duración de tiempo en años y meses:

```
INTERVAL year_to_month_qualifier
```

Para especificar un tipo de datos de intervalo para almacenar una duración en días, horas, minutos y segundos:

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

## Sintaxis de literal de intervalo
<a name="interval_data_types-syntax-literal"></a>

Para especificar un literal de intervalo para definir una duración de tiempo en años y meses:

```
INTERVAL quoted-string year_to_month_qualifier
```

Para especificar un literal de intervalo para definir una duración en días, horas, minutos y segundos:

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

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

 *quoted-string*   
Especifica un valor numérico positivo o negativo especificando una cantidad y la unidad de fecha y hora como cadena de entrada. **Si la *cadena entre comillas* contiene solo un número, AWS Clean Rooms determina las unidades del calificador year\$1to\$1month\$1qualifier o day\$1to\$1second\$1qualifier.** Por ejemplo, `'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` y `'13 day 1 hour 1 minute 1.123 seconds' SECOND` representa `13 days 1 hour 1 minute 1.123 seconds`. Para obtener más información acerca de los formatos de salida de un intervalo, consulte [Estilos de intervalo](#interval_data_types-interval-styles).

 *year\$1to\$1month\$1qualifier*   
Especifica el rango del intervalo. Si usa un calificador y crea un intervalo con unidades de tiempo más pequeñas que el calificador, trunca y descarta las partes más pequeñas del intervalo. AWS Clean Rooms Los valores válidos para *year\$1to\$1month\$1qualifier* son:  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
Especifica el rango del intervalo. Si usa un calificador y crea un intervalo con unidades de tiempo más pequeñas que el calificador, AWS Clean Rooms trunca y descarta las partes más pequeñas del intervalo. Los valores válidos para *day\$1to\$1second\$1qualifier* son:  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
El resultado del literal INTERVAL se trunca al componente INTERVAL más pequeño especificado. Por ejemplo, al utilizar un calificador MINUTE, AWS Clean Rooms descarta las unidades de tiempo inferiores a MINUTE.  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
El valor resultante se trunca en `'1 day 01:01:00'`.

 *fractional\$1precision*   
Parámetro opcional que especifica el número de dígitos fraccionales permitidos en el intervalo. El argumento *fractional\$1precision* solo se debe especificar si el intervalo contiene SECOND. Por ejemplo, `SECOND(3)` crea un intervalo que permite solo tres dígitos fraccionales, como 1234 segundos. El número máximo de dígitos fraccionales es seis.

La configuración de la sesión `interval_forbid_composite_literals` determina si se devuelve un error cuando se especifica un intervalo con las partes YEAR TO MONTH y DAY TO SECOND. 

## Aritmética de intervalos
<a name="interval_data_types-arithmetic"></a>

Puede utilizar valores de intervalo con otros valores de fecha y hora para realizar operaciones aritméticas. En las siguientes tablas se describen las operaciones disponibles y los resultados de tipo de datos de cada operación. 

**nota**  
 Las operaciones que pueden producir resultados `date` y `timestamp` lo hacen en función de la unidad de tiempo más pequeña implicada en la ecuación. Por ejemplo, cuando se agrega un `interval` a una `date` el resultado es una `date` si es un intervalo YEAR TO MONTH y una marca temporal si es un intervalo DAY TO SECOND. 

Las operaciones en las que el primer operando es un `interval` producen los siguientes resultados para el segundo operando dado:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

Las operaciones en las que el primer operando es una `date` producen los siguientes resultados para el segundo operando dado:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

Las operaciones en las que el primer operando es una `timestamp` producen los siguientes resultados para el segundo operando dado:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/clean-rooms/latest/sql-reference/interval_data_types_spark.html)

## Estilos de intervalo
<a name="interval_data_types-interval-styles"></a>
+ `postgres`: sigue el estilo de PostgreSQL. Es el valor predeterminado.
+ `postgres_verbose`: sigue el estilo detallado de PostgreSQL.
+ `sql_standard`: sigue el estilo de literales de intervalo estándar de SQL.

El siguiente comando establece el estilo de intervalo en `sql_standard`.

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

**Formato de salida postgres**

A continuación, se muestra el formato de salida del estilo de intervalo `postgres`. Cada valor numérico puede 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 salida postgres\$1verbose**

La sintaxis de postgres\$1verbose es similar a la de postgres, pero las salidas de postgres\$1verbose también contienen la unidad de tiempo.

```
'[@] <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 salida sql\$1standard**

Los valores del intervalo de año a mes tienen el siguiente formato. Si se especifica un signo negativo antes del intervalo, eso indica que el intervalo es un valor negativo y se aplica a todo el intervalo.

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

Los valores del intervalo de día a segundo tienen el siguiente formato.

```
'[-]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
```

## Ejemplos de tipo de datos de intervalo
<a name="interval_data_types-examples"></a>

En los siguientes ejemplos, se muestra cómo usar tipos de datos INTERVAL con tablas.

```
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 
-----+-----
```

## Ejemplos de literales de intervalo
<a name="interval_data_types_literals-examples"></a>

Los siguientes ejemplos se ejecutan con el estilo de intervalo establecido en `postgres`.

En el siguiente ejemplo, se muestra cómo crear un literal INTERVAL de 1 año.

```
select INTERVAL '1' YEAR 

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

Si especifica una *quoted-string* que supere el calificador, las unidades de tiempo restantes se truncan con respecto al intervalo. En el ejemplo siguiente, un intervalo de 13 meses se convierte en 1 año y 1 mes, pero el mes restante se omite debido al calificador YEAR.

```
select INTERVAL '13 months' YEAR

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

Si utiliza un calificador inferior a la cadena de intervalos, se incluyen las unidades sobrantes.

```
select INTERVAL '13 months' MONTH

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

Al especificar una precisión en el intervalo, se trunca el número de dígitos fraccionarios hasta alcanzar la precisión especificada.

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

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

Si no especifica una precisión, AWS Clean Rooms utiliza la precisión máxima de 6.

```
select INTERVAL '1.23456789' SECOND

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

En el siguiente ejemplo, se muestra cómo crear un intervalo con rangos.

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

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

Los calificadores dictan las unidades que se especifican. Por ejemplo, aunque en el ejemplo siguiente se utiliza la misma *cadena entrecomillada* de «2:2» que en el ejemplo anterior, se AWS Clean Rooms reconoce que se utilizan unidades de tiempo diferentes debido al calificador.

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

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

También se admiten las abreviaturas y los plurales de cada unidad. Por ejemplo, `5s`, `5 second` y `5 seconds` son intervalos equivalentes. Las unidades admitidas son años, meses, horas, minutos y 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
```

# Ejemplos de literales de intervalo sin sintaxis de calificador
<a name="interval_literals_examples"></a>

**nota**  
En los siguientes ejemplos se muestra el uso de un literal de intervalo sin un calificador `YEAR TO MONTH` o `DAY TO SECOND`. Para obtener información sobre el uso del literal de intervalo recomendado con un calificador, consulte [Literales y tipos de datos de intervalo](interval_data_types_spark.md).

Use un literal de intervalo para identificar períodos específicos de tiempo, como `12 hours` o `6 months`. Puede usar estos literales de intervalo en condiciones y cálculos que involucran expresiones de fecha y hora. 

 Un literal de intervalo se expresa como una combinación de la palabra clave INTERVAL con una cantidad numérica y una parte de fecha compatible, por ejemplo, `INTERVAL '7 days'` o `INTERVAL '59 minutes'`. Puede conectar varias cantidades y unidades para formar un intervalo más preciso, por ejemplo: `INTERVAL '7 days, 3 hours, 59 minutes'`. También se admiten abreviaturas y plurales de cada unidad; por ejemplo: `5 s`, `5 second` y `5 seconds` son intervalos equivalentes.

Si no especifica una parte de fecha, el valor de intervalo representa segundos. Puede especificar el valor de cantidad como una fracción (por ejemplo: `0.5 days`).

En los siguientes ejemplos se muestra una serie de cálculos con diferentes valores de intervalo.

A continuación, se agrega 1 segundo a la fecha especificada.

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

A continuación, se agrega 1 minuto a la fecha especificada.

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

A continuación, se agregan 3 horas y 35 minutos a la fecha 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)
```

A continuación, se agregan 52 semanas a la fecha especificada.

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

A continuación, se agregan 1 semana, 1 hora, 1 minuto y 1 segundo a la fecha 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)
```

A continuación, se agregan 12 horas (medio día) a la fecha 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)
```

Lo siguiente resta 4 meses al 15 de febrero de 2023 y el resultado es 15 de octubre de 2022.

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

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

Lo siguiente resta 4 meses al 31 de marzo de 2023 y el resultado es 30 de noviembre de 2022. El cálculo tiene en cuenta el número de días de un mes.

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

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