Funzioni Datetime in Standard SQL

author
9 minutes, 7 seconds Read

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

  1. Costruisce un oggetto DATETIME usando valori INT64 che rappresentano anno, mese, giorno, ora, minuto e secondo.
  2. Costruisce un oggetto DATETIME utilizzando un oggetto DATE e un oggetto opzionale TIME.
  3. 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 di datetime_expression nell’intervallo . Le settimane iniziano il WEEKDAY.datetimeprima del primo WEEKDAY dell’anno sono nella settimana 0. I valori validi per WEEKDAY sono SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, e SATURDAY.
  • ISOWEEK: Restituisce il numero di settimana ISO 8601 del datetime_expression. I ISOWEEK iniziano il lunedì. I valori restituiti sono nell’intervallo . Il primo ISOWEEK 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 appartiene date_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 oggetto DATE.
  • Se part è TIME, restituisce un oggetto TIME.

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 7 DAYs.
  • 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 7 DAYs.
  • 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_adatetime_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 il WEEKDAY. I valori validi per WEEKDAY sono SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, e SATURDAY.
  • 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>): Tronca datetime_expression al limite di settimana precedente, dove le settimane iniziano il WEEKDAY. I valori validi per WEEKDAY sonoSUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, eSATURDAY.
  • ISOWEEK: Tronca datetime_expression al precedente limite di settimanaISO 8601. ISOWEEKinizia il lunedì. Il primo ISOWEEK di ogni anno ISO contiene il primo giovedì del corrispondente anno del calendario gregoriano. Qualsiasi date_expressionprima di questo tronca al lunedì precedente.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: Tronca datetime_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_expression2015-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 7 DAYs.
  • WEEK(<WEEKDAY>). <WEEKDAY> rappresenta il giorno iniziale della settimana, i valori validi sono SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, e SATURDAY.
  • 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 da1970-01-01 00:00:00.0. Per esempio, se l’anno non è specificato, allora è inizializzato a 1970.
  • Nomi insensibili alle maiuscole. I nomi, come Monday e February, 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 stringaDATETIME. Gli spazi bianchi iniziali e finali nella stringa DATETIME 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:

Similar Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.