Funciones de tiempo en SQL estándar

BigQuery admite las siguientes funciones TIME.

CURRENT_TIME

CURRENT_TIME([timezone])

Descripción

Muestra la hora actual como un objeto TIME.

Esta función admite un parámetro timezone opcional. Consulta las Definiciones de la zona horaria para obtener información sobre cómo especificar una zona horaria.

Tipo de datos mostrados

TIME

Ejemplo

SELECT CURRENT_TIME() as now;

+----------------------------+
| now                        |
+----------------------------+
| 15:31:38.776361            |
+----------------------------+

TIME

1. TIME(hour, minute, second)
2. TIME(timestamp, [timezone])
3. TIME(datetime)

Descripción

  1. Construye un objeto TIME mediante valores INT64 que representan la hora, los minutos y los segundos.
  2. Construye un objeto TIME mediante un objeto TIMESTAMP. Admite un parámetro opcional para especificar una zona horaria. Si no se especifica una zona horaria, se usa la predeterminada, UTC.
  3. Construye un objeto TIME mediante un objeto DATETIME.

Tipo de datos mostrados

TIME

Ejemplo

SELECT
  TIME(15, 30, 00) as time_hms,
  TIME(TIMESTAMP "2008-12-25 15:30:00+08", "America/Los_Angeles") as time_tstz;

+----------+-----------+
| time_hms | time_tstz |
+----------+-----------+
| 15:30:00 | 23:30:00  |
+----------+-----------+
SELECT TIME(DATETIME "2008-12-25 15:30:00.000000") AS time_dt;

+----------+
| time_dt  |
+----------+
| 15:30:00 |
+----------+

EXTRACT

EXTRACT(part FROM time_expression)

Descripción

Muestra un valor que corresponde a la part especificada de una time_expression proporcionada.

Los valores part permitidos son los siguientes:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

Los valores mostrados truncan los períodos de orden inferior. Por ejemplo, cuando se extraen segundos, EXTRACT trunca los valores de milisegundos y microsegundos.

Tipo de datos mostrados

INT64

Ejemplo

En el siguiente ejemplo, EXTRACT muestra un valor que corresponde a la parte de tiempo HOUR.

SELECT EXTRACT(HOUR FROM TIME "15:30:00") as hour;

+------------------+
| hour             |
+------------------+
| 15               |
+------------------+

TIME_ADD

TIME_ADD(time_expression, INTERVAL int64_expression part)

Descripción

Agrega unidades int64_expression de part al objeto TIME.

TIME_ADD admite los siguientes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

Esta función se ajusta automáticamente cuando los valores caen fuera del límite de 00:00:00 a 24:00:00. Por ejemplo, si agregas una hora a la 23:30:00, el valor que se muestra es 00:30:00.

Tipos de datos mostrados

TIME

Ejemplo

SELECT
  TIME "15:30:00" as original_time,
  TIME_ADD(TIME "15:30:00", INTERVAL 10 MINUTE) as later;

+-----------------------------+------------------------+
| original_time               | later                  |
+-----------------------------+------------------------+
| 15:30:00                    | 15:40:00               |
+-----------------------------+------------------------+

TIME_SUB

TIME_SUB(time_expression, INTERVAL int64_expression part)

Descripción

Resta unidades int64_expression de part al objeto TIME.

TIME_SUB admite los siguientes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

Esta función se ajusta automáticamente cuando los valores caen fuera del límite de 00:00:00 a 24:00:00. Por ejemplo, si restas una hora de 00:30:00, el valor que se muestra es 23:30:00.

Tipo de datos mostrados

TIME

Ejemplo

SELECT
  TIME "15:30:00" as original_date,
  TIME_SUB(TIME "15:30:00", INTERVAL 10 MINUTE) as earlier;

+-----------------------------+------------------------+
| original_date                | earlier                |
+-----------------------------+------------------------+
| 15:30:00                    | 15:20:00               |
+-----------------------------+------------------------+

TIME_DIFF

TIME_DIFF(time_expression_a, time_expression_b, part)

Descripción

Muestra la cantidad de intervalos part completos especificados entre dos objetos TIME (time_expression_a y time_expression_b). Si el primer TIME es anterior al segundo, el resultado es negativo. Genera un error si el cálculo desborda el tipo de resultado, por ejemplo, si la diferencia en microsegundos entre los dos objetos TIME desbordara un valor INT64.

TIME_DIFF admite los siguientes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

Tipo de datos mostrados

INT64

Ejemplo

SELECT
  TIME "15:30:00" as first_time,
  TIME "14:35:00" as second_time,
  TIME_DIFF(TIME "15:30:00", TIME "14:35:00", MINUTE) as difference;

+----------------------------+------------------------+------------------------+
| first_time                 | second_time            | difference             |
+----------------------------+------------------------+------------------------+
| 15:30:00                   | 14:35:00               | 55                     |
+----------------------------+------------------------+------------------------+

TIME_TRUNC

TIME_TRUNC(time_expression, part)

Descripción

Trunca un objeto TIME al nivel de detalle de part.

TIME_TRUNC admite los siguientes valores para part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR

Tipo de datos mostrados

TIME

Ejemplo

SELECT
  TIME "15:30:00" as original,
  TIME_TRUNC(TIME "15:30:00", HOUR) as truncated;

+----------------------------+------------------------+
| original                   | truncated              |
+----------------------------+------------------------+
| 15:30:00                   | 15:00:00               |
+----------------------------+------------------------+

FORMAT_TIME

FORMAT_TIME(format_string, time_object)

Descripción Da formato a un objeto TIME según la format_string especificada. Consulta Elementos de formato admitidos para TIME a fin de obtener una lista de los elementos de formato que admite esta función.

Tipo de datos mostrados

STRING

Ejemplo

SELECT FORMAT_TIME("%R", TIME "15:30:00") as formatted_time;

+----------------+
| formatted_time |
+----------------+
| 15:30          |
+----------------+

PARSE_TIME

PARSE_TIME(format_string, time_string)

Descripción

Convierte una representación de string de tiempo en un objeto TIME.

format_string contiene los elementos de formato que definen cómo se da formato a time_string. Cada elemento en time_string debe tener un elemento correspondiente en format_string. La ubicación de cada elemento en format_string debe coincidir con la ubicación de cada elemento en time_string.

-- This works because elements on both sides match.
SELECT PARSE_TIME("%I:%M:%S", "07:30:00")

-- This doesn't work because the seconds element is in different locations.
SELECT PARSE_TIME("%S:%I:%M", "07:30:00")

-- This doesn't work because one of the seconds elements is missing.
SELECT PARSE_TIME("%I:%M", "07:30:00")

-- This works because %T can find all matching elements in time_string.
SELECT PARSE_TIME("%T", "07:30:00")

La string de formato admite por completo la mayoría de los elementos de formato, excepto %P.

Cuando uses PARSE_TIME, ten en cuenta lo siguiente:

  • Campos sin especificar. Todo campo sin especificar se inicializa desde 00:00:00.0. Por ejemplo, si seconds no está especificado, el valor predeterminado es 00, y así sucesivamente.
  • Espacio en blanco. Uno o más espacios en blanco consecutivos en la string de formato coinciden con cero o más espacios en blanco consecutivos en la string TIME. Además, los espacios en blanco iniciales y finales en la string TIME siempre están permitidos, incluso si no están en la string de formato.
  • Precedencia del formato. Cuando dos (o más) elementos de formato tienen información superpuesta, el último generalmente anula los anteriores.

Tipo de datos mostrados

TIME

Ejemplo

SELECT PARSE_TIME("%H", "15") as parsed_time;

+-------------+
| parsed_time |
+-------------+
| 15:00:00    |
+-------------+
SELECT PARSE_TIME('%I:%M:%S %p', '2:23:38 PM') AS parsed_time

+-------------+
| parsed_time |
+-------------+
| 14:23:38    |
+-------------+

Elementos de formato admitidos para TIME

A menos que se indique lo contrario, las funciones TIME que usan strings de formato admiten los siguientes elementos:

Elemento de formato Descripción
%H La hora (formato de 24 horas) como número decimal (00-23).
%I La hora (formato de 12 horas) como número decimal (01-12).
%k La hora (formato de 24 horas) como número decimal (0-23); los dígitos individuales están precedidos por un espacio.
%l La hora (formato de 12 horas) como número decimal (1-12); los dígitos individuales están precedidos por un espacio.
%M El minuto como número decimal (00-59).
%n Un carácter de salto de línea.
%P Ya sea a.m. o p.m.
%p Ya sea A.M. o P.M.
%R La hora en el formato %H:%M.
%r La hora en el formato de 12 horas con la notación A.M./P.M.
%S El segundo como número decimal (00-60).
%T La hora en el formato %H:%M:%S.
%t Un tabulador
%X La representación de la hora en formato HH:MM:SS.
%% Un solo carácter %.
%E#S Segundos con # dígitos de precisión fraccional.
%E*S Segundos con precisión fraccional completa (un "*" literal).