BigQuery admite las siguientes funciones DATETIME
.
Todas las salidas se formatean automáticamente según la norma ISO 8601, separando la fecha y la hora con unT
.
CURRENT_DATETIME
CURRENT_DATETIME()
Descripción
Devuelve la hora actual como un objeto DATETIME
.
Esta función admite un parámetro opcional timezone
.Consulte las definiciones de zona horaria para obtener información sobre cómo especificar una zona horaria.
Devuelve el tipo de datos
DATETIME
Ejemplo
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Descripción
- Construye un objeto
DATETIME
utilizando valores INT64 que representan el año, el mes, el día, la hora, los minutos y los segundos. - Construye un objeto
DATETIME
utilizando un objeto DATE y un objeto TIME opcional. - Construye un objeto
DATETIME
utilizando un objeto TIMESTAMP. Admite un parámetro opcional para especificar una zona horaria. Si no se especifica una zona horaria, se utiliza la zona horaria por defecto, UTC.
Devuelve el tipo de datos
DATETIME
Ejemplo
EXTRACT
EXTRACT(part FROM datetime_expression)
Descripción
Devuelve un valor que corresponde al part
especificado de un datetime_expression
suministrado.
Los valores part
permitidos son:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
WEEK
: Devuelve el número de semana de la fecha en el rango . Las semanas comienzan con el domingo, y las fechas anteriores al primer domingo del año están en la semana 0. -
WEEK(<WEEKDAY>)
: Devuelve el número de semana dedatetime_expression
en el rango . Las semanas comienzan enWEEKDAY
.datetime
s anteriores al primerWEEKDAY
del año están en la semana 0. Los valores válidos paraWEEKDAY
sonSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ySATURDAY
. -
ISOWEEK
: Devuelve el número de semana ISO 8601 deldatetime_expression
. LosISOWEEK
comienzan en lunes. Los valores devueltos están en el rango . El primerISOWEEK
de cada año ISO comienza el lunes anterior al primer jueves del año del calendario gregoriano. MONTH
QUARTER
YEAR
-
ISOYEAR
: Devuelve el año de numeración ISO 8601, que es el año del calendario gregoriano que contiene elJueves de la semana a la que pertenecedate_expression
. DATE
TIME
Los valores devueltos truncan los períodos de tiempo de orden inferior. Por ejemplo, al extraersegundos, EXTRACT
trunca los valores de milisegundos y microsegundos.
Devuelve el tipo de datos
INT64
, excepto en los siguientes casos:
- Si
part
esDATE
, devuelve un objetoDATE
. - Si
part
esTIME
, devuelve un objetoTIME
.
Ejemplos
En el siguiente ejemplo, EXTRACT
devuelve un valor correspondiente a la parte de tiempo HOUR
.
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
En el siguiente ejemplo, EXTRACT
devuelve valores correspondientes a diferentes partes de tiempo de una columna de datetimes.
En el siguiente ejemplo, datetime_expression
cae en domingo. EXTRACT
calcula la primera columna utilizando las semanas que comienzan en domingo, y calcula la segunda columna utilizando las semanas que comienzan en lunes.
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
Descripción
Agrega int64_expression
unidades de part
al objeto DATETIME
.
DATETIME_ADD
admite los siguientes valores para part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Equivalente a 7DAY
s. MONTH
QUARTER
YEAR
Se requiere un manejo especial para las partes de MES, TRIMESTRE y AÑO cuando la fecha está en (o cerca de) el último día del mes. Si el mes resultante tiene menos días que el día de la FECHA original, entonces el día resultante es el último día del nuevo mes.
Tipo de datos de retorno
DATETIME
Ejemplo
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
Descripción
Resta int64_expression
unidades de part
del DATETIME
.
DATETIME_SUB
admite los siguientes valores para part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Equivalente a 7DAY
s. MONTH
QUARTER
YEAR
Se requiere un manejo especial para las partes MONTH
, QUARTER
y YEAR
cuando la fecha está en (o cerca de) el último día del mes. Si el mes resultante tiene menos días que el día original de DATETIME
, entonces el día resultante es el último día del nuevo mes.
Devuelve el tipo de datos
DATETIME
Ejemplo
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
Descripción
Devuelve el número de intervalos enteros especificados part
entre dos objetosDATETIME
(datetime_expression_a
– datetime_expression_b
).Si el primer DATETIME
es anterior al segundo, la salida es negativa. Lanza un error si el cálculo desborda el tipo de resultado, por ejemplo, si la diferencia de microsegundos entre los dos objetos DATETIME
desborda un valorINT64
.
DATETIME_DIFF
admite los siguientes valores para part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
: Esta parte de la fecha comienza en domingo. -
WEEK(<WEEKDAY>)
: Esta parte de la fecha comienza enWEEKDAY
. Los valores válidos paraWEEKDAY
sonSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ySATURDAY
. -
ISOWEEK
: Utiliza los límites de la semana ISO 8601. Las semanas ISO comienzan en lunes. MONTH
QUARTER
YEAR
-
ISOYEAR
: Utiliza el límite del año de numeración de la semana ISO 8601. El límite del año ISO es el lunes de la primera semana cuyo jueves pertenece al año del calendario gregoriano correspondiente.
Tipo de datos de retorno
INT64
Ejemplo
El ejemplo anterior muestra el resultado de DATETIME_DIFF
para dos DATETIME
que están separados por 24 horas. DATETIME_DIFF
con la parte WEEK
devuelve 1 porqueDATETIME_DIFF
cuenta el número de límites de la parte en este rango deDATETIME
s. Cada WEEK
comienza en domingo, así que hay un límite de parte entre el sábado, 2017-10-14 00:00:00
y el domingo, 2017-10-15 00:00:00
.
El siguiente ejemplo muestra el resultado de DATETIME_DIFF
para dos fechas de años indiferentes. DATETIME_DIFF
con la parte de fecha YEAR
devuelve 3 porque cuenta el número de límites del año del calendario gregoriano entre los dosDATETIME
. DATETIME_DIFF
con la parte de fecha ISOYEAR
devuelve 2 porque este segundo DATETIME
pertenece al año ISO 2015. El primer jueves del año calendario 2015 fue el 2015-01-01, por lo que el año ISO 2015 comienza el lunes anterior, el 2014-12-29.
El siguiente ejemplo muestra el resultado de DATETIME_DIFF
para dos días de insucesión. La primera fecha cae en un lunes y la segunda en un domingo. DATETIME_DIFF
con la parte de fecha WEEK
devuelve 0 porque este timepart utiliza semanas que comienzan en domingo. DATETIME_DIFF
con la parte de fechaWEEK(MONDAY)
devuelve 1. DATETIME_DIFF
con la parte de fechaISOWEEK
también devuelve 1 porque las semanas ISO comienzan en lunes.
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Descripción
Trunca un objeto DATETIME
a la granularidad de part
.
DATETIME_TRUNC
admite los siguientes valores para part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
WEEK(<WEEKDAY>)
: Truncadatetime_expression
hasta el límite de la semana anterior, donde las semanas comienzan enWEEKDAY
. Los valores válidos paraWEEKDAY
sonSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
ySATURDAY
. -
ISOWEEK
: Truncadatetime_expression
al límite de la semana ISO 8601 anterior.ISOWEEK
comienza el lunes. El primerISOWEEK
de cada año ISO contiene el primer jueves del año del calendario gregoriano correspondiente. Cualquierdate_expression
anterior a éste se truncará al lunes anterior. MONTH
QUARTER
YEAR
-
ISOYEAR
: Truncadatetime_expression
al límite del año de numeración de la semana ISO 8601 anterior. El límite del año ISO es el lunes de la primera semana cuyo jueves pertenece al año del calendario gregoriano correspondiente.
Retorno del tipo de datos
DATETIME
Ejemplos
En el siguiente ejemplo, el DATETIME
original cae en domingo. Como el part
es WEEK(MONDAY)
, DATE_TRUNC
devuelve el DATETIME
para el lunes anterior.
En el siguiente ejemplo, el datetime_expression
original está en el año del calendario gregoriano 2015. Sin embargo, DATETIME_TRUNC
con la fecha ISOYEAR
trunca el datetime_expression
al principio del año ISO, no del año del calendario gregoriano. El primer jueves del año civil 2015 fue2015-01-01, por lo que el año ISO 2015 comienza el lunes anterior, 2014-12-29.Por lo tanto, el límite del año ISO que precede al datetime_expression
2015-06-15 00:00:00 es 2014-12-29.
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
Descripción
Formatea un objeto DATETIME
de acuerdo con el format_string
especificado. VerElementos de formato soportados para DATETIMEpara una lista de elementos de formato que soporta esta función.
Devuelve el tipo de datos
STRING
Ejemplos
SELECT FORMAT_DATETIME("%c", DATETIME "2008-12-25 15:30:00") AS formatted;+--------------------------+| formatted |+--------------------------+| Thu Dec 25 15:30:00 2008 |+--------------------------+
SELECT FORMAT_DATETIME("%b-%d-%Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec-25-2008 |+-------------+
SELECT FORMAT_DATETIME("%b %Y", DATETIME "2008-12-25 15:30:00") AS formatted;+-------------+| formatted |+-------------+| Dec 2008 |+-------------+
Último día
LAST_DAY(datetime_expression)
Descripción
Devuelve el último día de una expresión datetime que contiene la fecha.Esto se utiliza comúnmente para devolver el último día del mes.
Puede especificar opcionalmente la parte de la fecha para la que se devuelve el último día.Si no se utiliza este parámetro, el valor por defecto es MONTH
.LAST_DAY
admite los siguientes valores para date_part
:
YEAR
QUARTER
MONTH
-
WEEK
. Equivalente a 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
representa el día de inicio de la semana.Los valores válidos sonSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, ySATURDAY
. -
ISOWEEK
. Utiliza los límites de la semana ISO 8601. Las semanas ISO comienzan el lunes. -
ISOYEAR
. El límite del año ISO es el lunes de la primera semana cuyo jueves pertenece al año del calendario gregoriano correspondiente.
Devuelve el tipo de datos
DATE
Ejemplo
Estos dos devuelven el último día del mes:
SELECT LAST_DAY(DATETIME '2008-11-25', MONTH) AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
SELECT LAST_DAY(DATETIME '2008-11-25') AS last_day+------------+| last_day |+------------+| 2008-11-30 |+------------+
Este devuelve el último día del año:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
Este devuelve el último día de la semana para una semana que comienza en domingo:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
Devuelve el último día de la semana para una semana que comienza en lunes:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(MONDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-16 |+------------+
PARSE_DATETIME
PARSE_DATETIME(format_string, datetime_string)
Descripción
Convierte una representación de cadena de un datetime a un objetoDATETIME
.
format_string
Contiene los elementos de formato que definen cómo se formatea datetime_string
. Cada elemento de datetime_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 datetime_string
.
La cadena de formato es totalmente compatible con la mayoría de los elementos de formato, excepto con%Q
, %a
, %A
,%g
, %G
, %j
, %P
, %u
, %U
, %V
, %w
y %W
.
PARSE_DATETIME
analiza string
según las siguientes reglas:
- Campos no especificados. Cualquier campo no especificado se inicializa a partir de
1970-01-01 00:00:00.0
. Por ejemplo, si el año no está especificado, se inicializa a partir de1970
. - Nombres sin distinción de mayúsculas y minúsculas. Los nombres, como
Monday
yFebruary
, no distinguen entre mayúsculas y minúsculas. - Espacios en blanco. Uno o más espacios en blanco consecutivos en la cadena de formato coincide con cero o más espacios en blanco consecutivos en la cadena
DATETIME
. Los espacios en blanco iniciales y finales en la cadenaDATETIME
siempre se permiten, incluso si no están en la cadena de formato. - Precedencia del formato. Cuando dos o más elementos de formato tienen información superpuesta, el último generalmente anula cualquier otro anterior, con algunas excepciones. Por ejemplo, tanto
%F
como%Y
afectan al año, por lo que el elemento anterior prevalece sobre el posterior. Véase la descripción de%s
,%C
y%y
en Elementos de formato admitidos para DATETIME.
Tipo de datos de retorno
DATETIME
Ejemplos
Los siguientes ejemplos analizan un literal STRING
como unDATETIME
.
SELECT PARSE_DATETIME('%Y-%m-%d %H:%M:%S', '1998-10-18 13:45:55') AS datetime;+---------------------+| datetime |+---------------------+| 1998-10-18T13:45:55 |+---------------------+
SELECT PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', '8/30/2018 2:23:38 PM') AS datetime+---------------------+| datetime |+---------------------+| 2018-08-30T14:23:38 |+---------------------+
El siguiente ejemplo analiza un literal STRING
que contiene una fecha en un formato de lenguaje natural como unDATETIME
.
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
Elementos de formato admitidos para DATETIME
A menos que se indique lo contrario, las funciones DATETIME
que utilizan cadenas de formato admiten los siguientes elementos: