BigQuery supporta le seguenti DATETIME
funzioni.
Tutti gli output sono automaticamente formattati secondo ISO 8601, separando data e ora con unT
.
CURRENT_DATETIME
CURRENT_DATETIME()
Descrizione
Ritorna l’ora corrente come oggetto DATETIME
.
Questa funzione supporta un parametro timezone
opzionale.Vedere Definizioni di fuso orario per informazioni su come specificare un fuso orario.
Ritorna il tipo di dati
DATETIME
Esempio
SELECT CURRENT_DATETIME() as now;+----------------------------+| now |+----------------------------+| 2016-05-19T10:38:47.046465 |+----------------------------+
DATETIME
Descrizione
- Costruisce un oggetto
DATETIME
usando valori INT64 che rappresentano anno, mese, giorno, ora, minuto e secondo. - Costruisce un oggetto
DATETIME
utilizzando un oggetto DATE e un oggetto opzionale TIME. - Costruisce un oggetto
DATETIME
utilizzando un oggetto TIMESTAMP. Supporta un parametro opzionale per specificare un fuso orario. Se non viene specificato alcun fuso orario, viene usato il fuso orario predefinito, UTC.
Ritorna il tipo di dati
DATETIME
Esempio
EXTRACT
EXTRACT(part FROM datetime_expression)
Descrizione
Ritorna un valore che corrisponde al part
specificato da un datetime_expression
fornito.
I valori part
consentiti sono:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAYOFWEEK
DAY
DAYOFYEAR
-
WEEK
: Restituisce il numero di settimana della data nell’intervallo . Le settimane iniziano con la domenica, e le date precedenti alla prima domenica dell’anno sono nella settimana 0. -
WEEK(<WEEKDAY>)
: Restituisce il numero della settimana didatetime_expression
nell’intervallo . Le settimane iniziano ilWEEKDAY
.datetime
prima del primoWEEKDAY
dell’anno sono nella settimana 0. I valori validi perWEEKDAY
sonoSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, eSATURDAY
. -
ISOWEEK
: Restituisce il numero di settimana ISO 8601 deldatetime_expression
. IISOWEEK
iniziano il lunedì. I valori restituiti sono nell’intervallo . Il primoISOWEEK
di ogni anno ISO inizia il lunedì prima del primo giovedì dell’anno del calendario gregoriano. MONTH
QUARTER
YEAR
-
ISOYEAR
: Restituisce l’anno con numerazione di settimana ISO 8601, che è l’anno del calendario gregoriano contenente il giovedì della settimana a cui appartienedate_expression
. DATE
TIME
I valori restituiti troncano i periodi di tempo di ordine inferiore. Per esempio, quando si estraggono i secondi, EXTRACT
tronca i valori dei millisecondi e dei microsecondi.
Tipo di dati restituiti
INT64
, tranne nei seguenti casi:
- Se
part
èDATE
, restituisce un oggettoDATE
. - Se
part
èTIME
, restituisce un oggettoTIME
.
Esempi
Nell’esempio seguente, EXTRACT
restituisce un valore corrispondente alla parte di tempo HOUR
.
SELECT EXTRACT(HOUR FROM DATETIME(2008, 12, 25, 15, 30, 00)) as hour;+------------------+| hour |+------------------+| 15 |+------------------+
Nell’esempio seguente, EXTRACT
restituisce valori corrispondenti a diverse parti di tempo da una colonna di date.
Nel seguente esempio, datetime_expression
cade di domenica. EXTRACT
calcola la prima colonna usando le settimane che iniziano di domenica, e calcola la seconda colonna usando le settimane che iniziano di lunedì.
DATETIME_ADD
DATETIME_ADD(datetime_expression, INTERVAL int64_expression part)
Descrizione
Aggiunge int64_expression
unità di part
all’oggetto DATETIME
.
DATETIME_ADD
supporta i seguenti valori per part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Equivalente a 7DAY
s. MONTH
QUARTER
YEAR
È richiesto un trattamento speciale per le parti MESE, QUARTO, e ANNO quando la data è all’ultimo giorno del mese (o vicino). Se il mese risultante ha meno giorni del giorno del DATETIME originale, allora il giorno risultante è l’ultimo giorno del nuovo mese.
Return Data Type
DATETIME
Example
DATETIME_SUB
DATETIME_SUB(datetime_expression, INTERVAL int64_expression part)
Descrizione
Sottrae int64_expression
unità di part
dal DATETIME
.
DATETIME_SUB
supporta i seguenti valori per part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
. Equivalente a 7DAY
s. MONTH
QUARTER
YEAR
È richiesto un trattamento speciale per le parti MONTH
, QUARTER
, e YEAR
quando la data è all’ultimo giorno del mese (o vicino). Se il mese risultante ha meno giorni del giorno dell’originale DATETIME
, allora il giorno risultante è l’ultimo giorno del nuovo mese.
Return Data Type
DATETIME
Example
DATETIME_DIFF
DATETIME_DIFF(datetime_expression_a, datetime_expression_b, part)
Description
Returns il numero di intervalli interi specificati part
tra due oggetti DATETIME
(datetime_expression_a
– datetime_expression_b
).Se il primo DATETIME
è precedente al secondo, il risultato è negativo. Lancia un errore se il calcolo trabocca il tipo di risultato, come se la differenza in microsecondi tra i due oggetti DATETIME
traboccasse un valore INT64
.
DATETIME_DIFF
supporta i seguenti valori per part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
-
WEEK
: Questa parte di data inizia di domenica. -
WEEK(<WEEKDAY>)
: Questa parte di data inizia ilWEEKDAY
. I valori validi perWEEKDAY
sonoSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, eSATURDAY
. -
ISOWEEK
: Utilizza i confini della settimana ISO 8601. Le settimane ISO iniziano il lunedì. MONTH
QUARTER
YEAR
-
ISOYEAR
: Utilizza il limite dell’anno di numerazione ISO 8601. Il limite dell’anno ISO è il lunedì della prima settimana il cui giovedì appartiene al corrispondente anno del calendario gregoriano.
Ritorno Tipo di dati
INT64
Esempio
L’esempio sopra mostra il risultato di DATETIME_DIFF
per due DATETIME
che distano 24 ore. DATETIME_DIFF
con la parte WEEK
restituisce 1 perchéDATETIME_DIFF
conta il numero di limiti della parte in questo intervallo diDATETIME
. Ogni WEEK
inizia di domenica, quindi c’è un confine parziale tra sabato, 2017-10-14 00:00:00
e domenica, 2017-10-15 00:00:00
.
L’esempio seguente mostra il risultato di DATETIME_DIFF
per due date di anni indifferenti. DATETIME_DIFF
con la parte di data YEAR
restituisce 3 perché conta il numero di confini dell’anno del calendario gregoriano tra i due DATETIME
. DATETIME_DIFF
con la parte di data ISOYEAR
restituisce 2 perché il secondo DATETIME
appartiene all’anno ISO 2015. Il primo giovedì dell’anno 2015 è stato il 2015-01-01, quindi l’anno ISO 2015 inizia il lunedì precedente, 2014-12-29.
L’esempio seguente mostra il risultato di DATETIME_DIFF
per due giorni di insuccessione. La prima data cade di lunedì e la seconda di domenica. DATETIME_DIFF
con la parte di data WEEK
restituisce 0 perché questa parte temporale usa settimane che iniziano di domenica. DATETIME_DIFF
con la parte dataWEEK(MONDAY)
restituisce 1. DATETIME_DIFF
con la parte dataISOWEEK
restituisce anche 1 perché le settimane ISO iniziano il lunedì.
DATETIME_TRUNC
DATETIME_TRUNC(datetime_expression, part)
Descrizione
Torna un oggetto DATETIME
alla granularità di part
.
DATETIME_TRUNC
supporta i seguenti valori per part
:
MICROSECOND
MILLISECOND
SECOND
MINUTE
HOUR
DAY
WEEK
-
WEEK(<WEEKDAY>)
: Troncadatetime_expression
al limite di settimana precedente, dove le settimane iniziano ilWEEKDAY
. I valori validi perWEEKDAY
sonoSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, eSATURDAY
. -
ISOWEEK
: Troncadatetime_expression
al precedente limite di settimanaISO 8601.ISOWEEK
inizia il lunedì. Il primoISOWEEK
di ogni anno ISO contiene il primo giovedì del corrispondente anno del calendario gregoriano. Qualsiasidate_expression
prima di questo tronca al lunedì precedente. MONTH
QUARTER
YEAR
-
ISOYEAR
: Troncadatetime_expression
al precedente limite dell’anno di numerazione settimanale ISO 8601. Il limite dell’anno ISO è il lunedì della prima settimana il cui giovedì appartiene all’anno del calendario gregoriano corrispondente.
Ritorno Tipo Dati
DATETIME
Esempi
Nell’esempio seguente, il DATETIME
originale cade di domenica. Poiché ilpart
è WEEK(MONDAY)
, DATE_TRUNC
restituisce il DATETIME
per il lunedì precedente.
Nell’esempio seguente, l’originale datetime_expression
è nell’anno Gregoriano 2015. Tuttavia, DATETIME_TRUNC
con la data ISOYEAR
tronca il datetime_expression
all’inizio dell’anno ISO, non dell’anno solare gregoriano. Il primo giovedì dell’anno solare 2015 è stato il2015-01-01, quindi l’anno ISO 2015 inizia il lunedì precedente, 2014-12-29.Quindi il confine dell’anno ISO che precede il datetime_expression
2015-06-15 00:00:00 è 2014-12-29.
FORMAT_DATETIME
FORMAT_DATETIME(format_string, datetime_expression)
Descrizione
Formatta un oggetto DATETIME
secondo il format_string
specificato. Vedere Elementi di formato supportati per DATETIME per una lista di elementi di formato supportati da questa funzione.
Tipo di dati restituiti
STRING
Esempi
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 |+-------------+
LAST_DAY
LAST_DAY(datetime_expression)
Descrizione
Risulta l’ultimo giorno da un’espressione datetime che contiene la data.Questo è comunemente usato per restituire l’ultimo giorno del mese.
E’ possibile specificare opzionalmente la parte di data per la quale viene restituito l’ultimo giorno.Se questo parametro non è usato, il valore predefinito è MONTH
.LAST_DAY
supporta i seguenti valori per date_part
:
YEAR
QUARTER
MONTH
-
WEEK
. Equivalente a 7DAY
s. -
WEEK(<WEEKDAY>)
.<WEEKDAY>
rappresenta il giorno iniziale della settimana, i valori validi sonoSUNDAY
,MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
, eSATURDAY
. -
ISOWEEK
. Utilizza i confini della settimana ISO 8601. Le settimane ISO iniziano il lunedì. -
ISOYEAR
. Utilizza il limite dell’anno di numerazione settimanale ISO 8601. Il limite dell’anno ISO è il lunedì della prima settimana il cui giovedì appartiene al corrispondente anno del calendario gregoriano.
Return Data Type
DATE
Example
Questi due restituiscono l’ultimo giorno del mese:
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 |+------------+
Questo restituisce l’ultimo giorno dell’anno:
SELECT LAST_DAY(DATETIME '2008-11-25 15:30:00', YEAR) AS last_day+------------+| last_day |+------------+| 2008-12-31 |+------------+
Questo restituisce l’ultimo giorno della settimana per una settimana che inizia di domenica:
SELECT LAST_DAY(DATETIME '2008-11-10 15:30:00', WEEK(SUNDAY)) AS last_day+------------+| last_day |+------------+| 2008-11-15 |+------------+
Ritorna l’ultimo giorno della settimana per una settimana che inizia di lunedì:
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)
Descrizione
Converte una rappresentazione stringa di un datetime in un oggettoDATETIME
.
format_string
contiene gli elementi di formato che definiscono come datetime_string
è formattato. Ogni elemento indatetime_string
deve avere un elemento corrispondente in format_string
. La posizione di ogni elemento in format_string
deve corrispondere alla posizione di ogni elemento in datetime_string
.
La stringa di formato supporta pienamente la maggior parte degli elementi di formato, eccetto per%Q
, %a
, %A
,%g
, %G
, %j
, %P
, %u
, %U
, %V
, %w
, e %W
.
PARSE_DATETIME
analizza string
secondo le seguenti regole:
- Campi non specificati. Ogni campo non specificato è inizializzato da
1970-01-01 00:00:00.0
. Per esempio, se l’anno non è specificato, allora è inizializzato a1970
. - Nomi insensibili alle maiuscole. I nomi, come
Monday
eFebruary
, sono insensibili alle maiuscole/minuscole. - Spazi bianchi. Uno o più spazi bianchi consecutivi nella stringa di formato corrisponde a zero o più spazi bianchi consecutivi nella stringa
DATETIME
. Gli spazi bianchi iniziali e finali nella stringaDATETIME
sono sempre ammessi, anche se non sono nella stringa di formato. - Precedenza del formato. Quando due o più elementi di formato hanno informazioni sovrapposte, l’ultimo generalmente prevale su qualsiasi precedente, con alcune eccezioni. Per esempio, sia
%F
che%Y
influenzano l’anno, quindi l’elemento precedente prevale su quello successivo. Vedere la descrizione di%s
,%C
e%y
in Elementi di formato supportati per DATETIME.
Tipo di dati restituito
DATETIME
Esempi
I seguenti esempi analizzano un letterale STRING
come 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 |+---------------------+
L’esempio seguente analizza un letterale STRING
contenente una data in un formato di linguaggio naturale come unDATETIME
.
SELECT PARSE_DATETIME('%A, %B %e, %Y','Wednesday, December 19, 2018') AS datetime;+---------------------+| datetime |+---------------------+| 2018-12-19T00:00:00 |+---------------------+
Elementi di formato supportati per DATETIME
Non diversamente specificato, le funzioni DATETIME
che usano stringhe di formato supportano i seguenti elementi: