Este tópico descreve a sintaxe e os parâmetros das funções de data compatíveis com o MaxCompute. Também são apresentados exemplos de uso dessas funções. Selecione a função de data adequada para realizar cálculos ou conversões de data conforme as necessidades do seu negócio.
|
Função |
Descrição |
|
Retorna um valor de data obtido após adicionar um número de meses a uma data especificada. |
|
|
Retorna o timestamp atual. |
|
|
Retorna o fuso horário do sistema atual. |
|
|
Adiciona ou subtrai dias de um valor de data com base no intervalo especificado por delta. Suporta apenas alterações em dias. A função DATE_ADD é o inverso da função |
|
|
Altera um valor de data com base na unidade de tempo especificada por datepart e no intervalo definido por delta. Permite modificações por ano, mês, dia, hora, minuto ou segundo. |
|
|
Converte um valor de data em uma string no formato especificado. |
|
|
Adiciona ou subtrai dias de um valor de data conforme o intervalo indicado por delta. A função DATE_SUB é o inverso da função |
|
|
Calcula a diferença entre dois valores de data de acordo com a unidade de tempo definida em datepart. |
|
|
Retorna um componente específico de um valor de data conforme a unidade de tempo indicada em datepart. |
|
|
Trunca um valor de data segundo a unidade de tempo especificada em datepart. |
|
|
Retorna o dia correspondente a um valor de data. |
|
|
Retorna o componente de dia de um valor de data. |
|
|
Retorna o dia da semana correspondente a um valor de data. |
|
|
Retorna um inteiro que representa o dia sequencial do ano. |
|
|
Retorna um componente específico de um timestamp. |
|
|
Converte um timestamp UNIX do tipo BIGINT em um valor de data do tipo DATETIME. |
|
|
Converte um timestamp UTC em um timestamp para um fuso horário específico. |
|
|
Retorna a hora atual do sistema como um valor de data. |
|
|
Retorna o componente de hora de um valor de data. |
|
|
Verifica se uma string de data pode ser convertida em um valor de data no formato especificado. |
|
|
Retorna o último dia do mês correspondente a um valor de data. |
|
|
Retorna o último dia do mês correspondente a um valor de data. |
|
|
Retorna o componente de minuto de um valor de data. |
|
|
Retorna o mês correspondente a um valor de data. |
|
|
Retorna o número de meses entre valores de data especificados. |
|
|
Retorna a data do primeiro dia da semana posterior a um valor de data que corresponda ao dia da semana especificado. |
|
|
Retorna a data e a hora atuais do sistema. |
|
|
Retorna o trimestre correspondente a um valor de data. |
|
|
Retorna o componente de segundo de um valor de data. |
|
|
Converte um valor de data em uma string no formato especificado. |
|
|
Converte uma string em um valor de data no formato especificado. |
|
|
Converte um valor de data em um timestamp UNIX com precisão de milissegundos. |
|
|
Trunca dados de data ou hora conforme a unidade de tempo datepart especificada e retorna dados do tipo STRING. |
|
|
Converte um valor de data em um timestamp UNIX do tipo inteiro. |
|
|
Retorna um número que representa o dia da semana correspondente a um valor de data. |
|
|
Retorna um número que representa a semana do ano correspondente a um valor de data. |
|
|
Retorna o ano correspondente a um valor de data. |
Observações de uso
O MaxCompute V2.0 oferece funções adicionais. Caso utilize funções que envolvam novos tipos de dados compatíveis com a edição de tipos de dados do MaxCompute V2.0, execute a instrução SET para ativar essa edição. Os novos tipos incluem TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP e BINARY.
Nível de sessão: Para usar a edição de tipos de dados do MaxCompute V2.0, adicione
set odps.sql.type.system.odps2=true;antes da instrução SQL desejada e envie ambas para execução conjunta.-
Nível de projeto: O proprietário do projeto pode ativar a edição de tipos de dados do MaxCompute V2.0 conforme as necessidades do projeto. A configuração entra em vigor após 10 a 15 minutos. Para ativar a edição de tipos de dados do MaxCompute V2.0 no nível do projeto, execute o seguinte comando:
setproject odps.sql.type.system.odps2=true;Para obter mais informações sobre
setproject, consulte Operações de projeto. Para detalhes sobre os cuidados necessários ao ativar a edição de tipos de dados do MaxCompute V2.0 no nível do projeto, consulte Guia de versão de tipos de dados.
Dados de exemplo
Esta seção apresenta dados de origem de exemplo para ilustrar o uso das funções de data. Neste tópico, cria-se uma tabela chamada mf_date_fun_t e insere-se dados nela. Instruções de exemplo:
CREATE TABLE IF NOT EXISTS mf_date_fun_t(
id INT,
date1 DATE,
datetime1 DATETIME,
timestamp1 TIMESTAMP,
date2 DATE,
datetime2 DATETIME,
timestamp2 TIMESTAMP,
date3 STRING,
date4 BIGINT);
INSERT INTO mf_date_fun_t VALUES
(1,DATE'2021-11-29',DATETIME'2021-11-29 00:01:00',TIMESTAMP'2021-01-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-20',123456780),
(2,DATE'2021-11-28',DATETIME'2021-11-28 00:02:00',TIMESTAMP'2021-02-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-21',123456781),
(3,DATE'2021-11-27',DATETIME'2021-11-27 00:03:00',TIMESTAMP'2021-03-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-22',123456782),
(4,DATE'2021-11-26',DATETIME'2021-11-26 00:04:00',TIMESTAMP'2021-04-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-23',123456783),
(5,DATE'2021-11-25',DATETIME'2021-11-25 00:05:00',TIMESTAMP'2021-05-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-24',123456784),
(6,DATE'2021-11-24',DATETIME'2021-11-24 00:06:00',TIMESTAMP'2021-06-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-25',123456785),
(7,DATE'2021-11-23',DATETIME'2021-11-23 00:07:00',TIMESTAMP'2021-07-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-26',123456786),
(8,DATE'2021-11-22',DATETIME'2021-11-22 00:08:00',TIMESTAMP'2021-08-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-27',123456787),
(9,DATE'2021-11-21',DATETIME'2021-11-21 00:09:00',TIMESTAMP'2021-09-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-28',123456788),
(10,DATE'2021-11-20',DATETIME'2021-11-20 00:10:00',TIMESTAMP'2021-10-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-29',123456789);
Consulte os dados da tabela mf_date_fun_t. Instrução de exemplo:
SELECT * FROM mf_date_fun_t;
O resultado retornado é o seguinte.
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| id | date1 | datetime1 | timestamp1 | date2 | datetime2 | timestamp2 | date3 | date4 |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| 1 | 2021-11-29 | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-20 | 123456780 |
| 2 | 2021-11-28 | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-21 | 123456781 |
| 3 | 2021-11-27 | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-22 | 123456782 |
| 4 | 2021-11-26 | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-23 | 123456783 |
| 5 | 2021-11-25 | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-24 | 123456784 |
| 6 | 2021-11-24 | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-25 | 123456785 |
| 7 | 2021-11-23 | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-26 | 123456786 |
| 8 | 2021-11-22 | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-27 | 123456787 |
| 9 | 2021-11-21 | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-28 | 123456788 |
| 10 | 2021-11-20 | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-29 | 123456789 |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
ADD_MONTHS
-
Sintaxe
STRING ADD_MONTHS(DATE|DATETIME|TIMESTAMP|STRING <startdate>, INT <num_months>) -
Descrição
Retorna um valor de data obtido após adicionar o número de meses especificado por num_months a startdate. Esta é uma função adicional do MaxCompute V2.0.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
startdate
Sim
Valor do tipo DATE, DATETIME, TIMESTAMP ou STRING. O valor deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. Se for do tipo STRING, deve conter pelo menos a parteyyyy-mm-dde não deve incluir strings extras.num_months
Sim
Valor do tipo INT.
-
Valor de retorno
Retorna um valor do tipo STRING no formato
yyyy-mm-dd. O valor retornado segue as regras abaixo:Se o valor de startdate não for do tipo DATE, DATETIME, TIMESTAMP ou STRING, ou se o formato não atender aos requisitos, retorna null.
Se o valor de startdate for null, retorna um erro.
Se o valor de num_months for null, retorna null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2017-05-14. SELECT ADD_MONTHS('2017-02-14',3); -- The return value is 0017-05-14. SELECT ADD_MONTHS('17-2-14',3); -- The return value is 2017-05-14. SELECT ADD_MONTHS('2017-02-14 21:30:00',3); -- The return value is NULL. SELECT ADD_MONTHS('20170214',3); -- The return value is NULL. SELECT ADD_MONTHS('2017-02-14 21:30:00',null); -
Exemplos com dados de tabela
Adicione meses especificados às datas nas colunas date1, datetime1, timestamp1 e date3. Este exemplo utiliza os dados descritos em Dados de exemplo. Instruções de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, ADD_MONTHS(date1,1) AS date1_add_months, datetime1, ADD_MONTHS(datetime1, 2) AS datetime1_add_months, timestamp1, ADD_MONTHS(timestamp1,3) AS timestamp1_add_months, date3, ADD_MONTHS(date3,4) AS date3_add_months FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | date1 | date1_add_months | datetime1 | datetime1_add_months | timestamp1 | timestamp1_add_months | date3 | date3_add_months | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | 2021-11-29 | 2021-12-29 | 2021-11-29 00:01:00 | 2022-01-29 | 2021-01-11 00:00:00.123456789 | 2021-04-11 | 2021-11-20 | 2022-03-20 | | 2021-11-28 | 2021-12-28 | 2021-11-28 00:02:00 | 2022-01-28 | 2021-02-11 00:00:00.123456789 | 2021-05-11 | 2021-11-21 | 2022-03-21 | | 2021-11-27 | 2021-12-27 | 2021-11-27 00:03:00 | 2022-01-27 | 2021-03-11 00:00:00.123456789 | 2021-06-11 | 2021-11-22 | 2022-03-22 | | 2021-11-26 | 2021-12-26 | 2021-11-26 00:04:00 | 2022-01-26 | 2021-04-11 00:00:00.123456789 | 2021-07-11 | 2021-11-23 | 2022-03-23 | | 2021-11-25 | 2021-12-25 | 2021-11-25 00:05:00 | 2022-01-25 | 2021-05-11 00:00:00.123456789 | 2021-08-11 | 2021-11-24 | 2022-03-24 | | 2021-11-24 | 2021-12-24 | 2021-11-24 00:06:00 | 2022-01-24 | 2021-06-11 00:00:00.123456789 | 2021-09-11 | 2021-11-25 | 2022-03-25 | | 2021-11-23 | 2021-12-23 | 2021-11-23 00:07:00 | 2022-01-23 | 2021-07-11 00:00:00.123456789 | 2021-10-11 | 2021-11-26 | 2022-03-26 | | 2021-11-22 | 2021-12-22 | 2021-11-22 00:08:00 | 2022-01-22 | 2021-08-11 00:00:00.123456789 | 2021-11-11 | 2021-11-27 | 2022-03-27 | | 2021-11-21 | 2021-12-21 | 2021-11-21 00:09:00 | 2022-01-21 | 2021-09-11 00:00:00.123456789 | 2021-12-11 | 2021-11-28 | 2022-03-28 | | 2021-11-20 | 2021-12-20 | 2021-11-20 00:10:00 | 2022-01-20 | 2021-10-11 00:00:00.123456789 | 2022-01-11 | 2021-11-29 | 2022-03-29 | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
-
CURRENT_TIMESTAMP
-
Sintaxe
TIMESTAMP CURRENT_TIMESTAMP() -
Descrição
Retorna o timestamp atual. O valor retornado não é fixo. Esta é uma função adicional do MaxCompute V2.0.
-
Valor de retorno
Retorna um valor do tipo TIMESTAMP.
-
Exemplos
-- The return value is '2017-08-03 11:50:30.661'. SET odps.sql.type.system.odps2=true; SELECT CURRENT_TIMESTAMP();
CURRENT_TIMEZONE
-
Sintaxe
STRING CURRENT_TIMEZONE() -
Descrição
Retorna o fuso horário do sistema atual.
-
Valor de retorno
Retorna um valor do tipo STRING.
-
Exemplos
-- The return value is Asia/Shanghai. SELECT CURRENT_TIMEZONE();
DATE_ADD
-
Sintaxe
DATE DATE_ADD(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>) -
Descrição
Adiciona ou subtrai o número de dias especificado por delta de um valor de data definido por startdate.
NotaPara adicionar ou subtrair dias da hora atual, combine esta função com a função GETDATE.
Caso precise de ajustes precisos em horas, minutos ou segundos, consulte a função DATEADD. Esta função suporta apenas incremento ou decremento de uma única unidade entre anos, meses, dias, horas, minutos ou segundos. Para ajustar múltiplas granularidades simultaneamente, recomenda-se o uso de uma função definida pelo usuário.
A lógica desta função é oposta à da função DATE_SUB.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
startdate
Sim
Data inicial. Aceita valores dos tipos DATE, DATETIME ou STRING.
Se o valor de entrada for do tipo STRING e o projeto utilizar a edição de tipos de dados do MaxCompute V1.0, ele será convertido implicitamente para DATE antes do cálculo. O valor STRING deve conter pelo menos a parte
'yyyy-mm-dd', como'2019-12-27'.delta
Sim
Número de dias a adicionar ou subtrair. Deve ser do tipo BIGINT. Se delta for maior que 0, os dias serão adicionados à data inicial. Se delta for menor que 0, os dias serão subtraídos da data inicial. Se delta for igual a 0, o valor da data permanece inalterado.
-
Valor de retorno
Retorna um valor do tipo DATE no formato
yyyy-mm-dd. O valor retornado segue as regras abaixo:Se o valor de startdate não for do tipo DATE, DATETIME ou STRING, retorna um erro.
Se o valor de startdate for null, retorna um erro.
Se o valor de delta for null, retorna null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2005-03-01. After one day is added, the result is beyond the last day of February. The first day of March is returned. SELECT DATE_ADD(DATETIME '2005-02-28 00:00:00', 1); -- The return value is 2005-02-27. One day is subtracted. SELECT DATE_ADD(DATE '2005-02-28', -1); -- The return value is 2005-03-20. SET odps.sql.type.system.odps2=false; SELECT DATE_ADD('2005-02-28 00:00:00', 20); -- If the current time is 2020-11-17 16:31:44, the return value is 2020-11-16. SELECT DATE_ADD(getdate(),-1); -- The return value is NULL. SELECT DATE_ADD('2005-02-28 00:00:00', null); -
Exemplos com dados de tabela
Altere os valores de data nas colunas date1, datetime1 e timestamp1 conforme o número de dias especificado por delta. Este exemplo utiliza os dados descritos em Dados de exemplo. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DATE_ADD(date1, 1) AS date1_date_add, datetime1, DATE_ADD(datetime1, -1) AS datetime1_date_add, timestamp1, DATE_ADD(timestamp1, 0) AS timestamp1_date_add FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+----------------+---------------------+-------------------+-------------------------------+--------------------+ | date1 | date1_date_add | datetime1 | datetime1_date_add| timestamp1 | timestamp1_date_add| +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-11-28 | 2021-01-11 00:00:00.123456789 | 2021-01-11 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-11-27 | 2021-02-11 00:00:00.123456789 | 2021-02-11 | | 2021-11-27 | 2021-11-28 | 2021-11-27 00:03:00 | 2021-11-26 | 2021-03-11 00:00:00.123456789 | 2021-03-11 | | 2021-11-26 | 2021-11-27 | 2021-11-26 00:04:00 | 2021-11-25 | 2021-04-11 00:00:00.123456789 | 2021-04-11 | | 2021-11-25 | 2021-11-26 | 2021-11-25 00:05:00 | 2021-11-24 | 2021-05-11 00:00:00.123456789 | 2021-05-11 | | 2021-11-24 | 2021-11-25 | 2021-11-24 00:06:00 | 2021-11-23 | 2021-06-11 00:00:00.123456789 | 2021-06-11 | | 2021-11-23 | 2021-11-24 | 2021-11-23 00:07:00 | 2021-11-22 | 2021-07-11 00:00:00.123456789 | 2021-07-11 | | 2021-11-22 | 2021-11-23 | 2021-11-22 00:08:00 | 2021-11-21 | 2021-08-11 00:00:00.123456789 | 2021-08-11 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-11-20 | 2021-09-11 00:00:00.123456789 | 2021-09-11 | | 2021-11-20 | 2021-11-21 | 2021-11-20 00:10:00 | 2021-11-19 | 2021-10-11 00:00:00.123456789 | 2021-10-11 | +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
-
DATEADD
-
Sintaxe
DATE|DATETIME DATEADD(DATE|DATETIME|TIMESTAMP <date>, BIGINT <delta>, STRING <datepart>) -
Descrição
Altera um valor de date com base na unidade de tempo especificada por datepart e no intervalo definido por delta. Para adicionar ou subtrair um intervalo da hora atual, combine esta função com a função GETDATE.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
date
Sim
Valor de data do tipo DATE, DATETIME ou TIMESTAMP. Um valor do tipo STRING é convertido implicitamente para DATETIME antes do cálculo se o formato corresponder ao padrão DATETIME
yyyy-mm-dd hh:mi:ss, como2021-08-28 00:00:00, e o projeto utilizar a edição de tipos de dados do MaxCompute V1.0.delta
Sim
Intervalo a ser adicionado ou subtraído do componente especificado do valor de data. Deve ser do tipo BIGINT. Se delta for maior que 0, o intervalo é adicionado ao valor de data. Caso contrário, o intervalo é subtraído. Se o valor de entrada for do tipo STRING ou DOUBLE, ele será convertido implicitamente para BIGINT antes do cálculo.
NotaAo adicionar ou subtrair o intervalo especificado por delta com base na unidade de tempo datepart, pode ocorrer transporte ou retorno em componentes de data mais significativos. As partes de ano, mês, hora, minuto e segundo são calculadas segundo os sistemas numéricos de base 10, base 12, base 24 e base 60, respectivamente.
Se a função DATEADD adicionar o intervalo especificado por delta ao componente de mês de um valor de data e essa operação não causar estouro no componente de dia, o valor do dia é mantido. Caso contrário, o componente de dia assume o valor do último dia do mês especificado.
datepart
Sim
Parte da data a ser modificada no valor de data. Deve ser uma constante do tipo STRING. Se o formato do valor de entrada for inválido ou se não for uma constante STRING, retorna um erro.
O valor deste parâmetro segue as regras de conversão entre os tipos STRING e DATETIME. O valor
yyyyindica o componente de ano. O valormmindica o componente de mês. O valorddindica o componente de dia. Para mais detalhes sobre as regras de conversão de tipos, consulte Conversão de tipos de dados. O Formato Estendido de Data/Hora (EDTF) também é suportado, como-year,-month,-mon,-dayou-hour. -
Valor de retorno
Retorna um valor do tipo DATE ou DATETIME no formato
yyyy-mm-ddouyyyy-mm-dd hh:mi:ss. O valor retornado segue as regras abaixo:Se o valor de date não for do tipo DATE, DATETIME ou TIMESTAMP, retorna um erro.
Se o valor de date for null, retorna um erro.
Se o valor de delta ou datepart for null, retorna null.
-
Exemplos
-
Exemplos com dados estáticos
-
Exemplo 1: uso comum
-- The return value is 2005-03-01 00:00:00. After one day is added, the result is beyond the last day of February. The first day of March is returned. SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd'); -- The return value is 2005-02-27 00:00:00. One day is subtracted. SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd'); -- The return value is 2006-10-28 00:00:00. After 20 months are added, the month overflows, and the year value increases by 1. SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm'); -- The return value is 2005-03-28 00:00:00. SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm'); -- The return value is 2005-02-28 00:00:00. February in 2005 has only 28 days. Therefore, the last day of February is returned. SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm'); -- The return value is 2005-02-28 00:00:00. SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm'); -- The return value is 2005-03-18. SELECT DATEADD(DATE '2005-02-18', 1, 'mm'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2005-03-18 00:00:00.0. SET odps.sql.type.system.odps2=true; SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm'); -- If the current time is 2020-11-17 16:31:44, the return value is 2020-11-16 16:31:44. SELECT DATEADD(GETDATE(),-1,'dd'); -- The return value is NULL. SELECT DATEADD(DATE '2005-02-18', 1, null); -- The return value is 2005-03-30 02:24:00, with 3 hours subtracted. SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh'); -- The return value is 2005-03-30 04:54:00, with 30 minutes subtracted. SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi'); -- The return value is 2005-03-30 05:23:30, with 30 seconds subtracted. SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss'); -
Exemplo 2: uso do DATEADD com valor do tipo DATETIME expresso como constante.
Em instruções SQL do MaxCompute, um valor do tipo DATETIME não pode ser expresso diretamente como constante. A instrução abaixo utiliza uma expressão inválida para um valor DATETIME:
SELECT DATEADD(2005-03-30 00:00:00, -1, 'mm');Para representar uma constante do tipo DATETIME, utilize uma expressão válida conforme a instrução abaixo:
-- Explicitly convert a constant of the STRING type into the DATETIME type. The return value is 2005-02-28 00:00:00. SELECT DATEADD(CAST("2005-03-30 00:00:00" AS datetime), -1, 'mm'); -
Exemplo 3: valor de entrada do tipo STRING.
-- The input value is of the STRING type but does not conform to the DATETIME-type format. As a result, an error is returned. SELECT DATEADD('2021-08-27',1,'dd'); -- The input value is of the STRING type and conforms to the DATETIME-type format, and the MaxCompute V1.0 data type edition is used in your project. The return value is 2005-03-01 00:00:00. SET odps.sql.type.system.odps2=false; SELECT DATEADD('2005-02-28 00:00:00', 1, 'dd');
-
-
Exemplos com dados de tabela
Altere os valores de data nas colunas date1, datetime1 e timestamp1 conforme a unidade de tempo especificada por datepart e o intervalo definido por delta. Este exemplo utiliza os dados descritos em Dados de exemplo. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DATEADD(date1,1,'dd') AS date1_dateadd, datetime1, DATEADD(datetime1,1,'mm') AS datetime1_dateadd, timestamp1, DATEADD(timestamp1,-1,'yyyy') AS timestamp1_dateadd FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+ | date1 | date1_dateadd | datetime1 | datetime1_dateadd | timestamp1 | timestamp1_dateadd | +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-12-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2020-01-11 00:00:00.123456789 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-12-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2020-02-11 00:00:00.123456789 | | 2021-11-27 | 2021-11-28 | 2021-11-27 00:03:00 | 2021-12-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2020-03-11 00:00:00.123456789 | | 2021-11-26 | 2021-11-27 | 2021-11-26 00:04:00 | 2021-12-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2020-04-11 00:00:00.123456789 | | 2021-11-25 | 2021-11-26 | 2021-11-25 00:05:00 | 2021-12-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2020-05-11 00:00:00.123456789 | | 2021-11-24 | 2021-11-25 | 2021-11-24 00:06:00 | 2021-12-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2020-06-11 00:00:00.123456789 | | 2021-11-23 | 2021-11-24 | 2021-11-23 00:07:00 | 2021-12-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2020-07-11 00:00:00.123456789 | | 2021-11-22 | 2021-11-23 | 2021-11-22 00:08:00 | 2021-12-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2020-08-11 00:00:00.123456789 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-12-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2020-09-11 00:00:00.123456789 | | 2021-11-20 | 2021-11-21 | 2021-11-20 00:10:00 | 2021-12-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2020-10-11 00:00:00.123456789 | +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
-
DATE_FORMAT
-
Sintaxe
STRING DATE_FORMAT(DATE|TIMESTAMP|STRING <date>, STRING <format>) -
Descrição
Converte um valor de date em uma string no format especificado.
-
Parâmetros
Parameter
Required
Description
date
Yes
O valor de data a ser convertido. Esse valor pode ser do tipo DATE, TIMESTAMP ou STRING.
Valores de data dos tipos DATE ou STRING são suportados apenas quando a edição de tipos de dados compatível com Hive está ativada. Execute o comando
set odps.sql.hive.compatible=true;para ativar essa edição.Caso o valor de data seja do tipo STRING, apenas os seguintes formatos são aceitos:
'yyyy-MM-dd', como'2019-12-27'.'yyyy-MM-dd hh:mm:ss', como'2019-12-27 12:23:10'.'yyyy-MM-dd hh:mm:ss.SSS', como'2019-12-27 12:23:10.123'.
format
Yes
Uma constante do tipo STRING. O parâmetro format define o formato da data, como
yyyy-MM-dd hh:mm:ss:SSSeyyyy-MM-dd hh:mi:ss:SSS. O valor é composto pelos seguintes elementos:YYYYouyyyy: o ano. yyyy representa o ano civil e YYYY representa o ano da semana.NotaO ano da semana pode não coincidir com o ano civil real. Tenha cuidado ao utilizar o formato de ano da semana.
MM: o mês.mm: o minuto.dd: o dia.HH: a hora no formato de 24 horas.hh: a hora no formato de 12 horas.mi: o minuto.ss: o segundo.SSS: o milissegundo.
ImportanteQuando a edição de tipos de dados compatível com Hive estiver desativada, tanto
HHquantohhindicam o uso do formato de 24 horas. Nesse cenário, o formato da data deve seryyyy-MM-dd hh:mi:ss. Se for utilizadoyyyy-MM-dd hh:mm:ss, o componentemmassumirá o mesmo valor do componente MM.Com a edição de tipos de dados compatível com Hive ativada,
HHindica o formato de 24 horas, enquantohhindica o formato de 12 horas. Nesse caso, o formato da data deve seryyyy-MM-dd hh:mm:ss. A utilização deyyyy-MM-dd hh:mi:ssresultará em null.
-
Valor de retorno
Retorna um valor do tipo STRING. O resultado segue as regras abaixo:
Se o valor de date não for do tipo DATE ou TIMESTAMP, a função retorna null.
Caso o valor de date seja null, um erro será retornado.
Quando o valor de format for null, o retorno será null.
-
Exemplos
-
Exemplos com dados estáticos
-- Enable the Hive-compatible data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.hive.compatible=true; -- If the current time is 2022-04-24 15:49, the return value is 2022-04-24 03:49:01.902. SELECT DATE_FORMAT(FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC'),'yyyy-MM-dd hh:mm:ss.SSS'); -- The return value is 2022-04-24. SELECT DATE_FORMAT('2022-04-24','yyyy-MM-dd'); -
Exemplos com dados de tabela
Converta os valores de data nas colunas datetime1 e timestamp1 em strings com um formato específico. Este exemplo utiliza os dados descritos em Dados de amostra. Instruções de exemplo:
-- Enable the Hive-compatible data type edition and the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.hive.compatible=true; SET odps.sql.type.system.odps2=true; SELECT datetime1, timestamp1, DATE_FORMAT(datetime1,'yyyy/MM/dd'), DATE_FORMAT(datetime1,'yyyy/MM/dd HH:mm:ss'), DATE_FORMAT(timestamp1,'yyyy/MM/dd HH:mm:ss') FROM mf_date_fun_t;O resultado retornado é apresentado a seguir.
+------------+------------+-----+-----+-----+ | datetime1 | timestamp1 | _c2 | _c3 | _c4 | +------------+------------+-----+-----+-----+ | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2021/11/29 | 2021/11/29 00:01:00 | 2021/01/11 00:00:00 | | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2021/11/28 | 2021/11/28 00:02:00 | 2021/02/11 00:00:00 | | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2021/11/27 | 2021/11/27 00:03:00 | 2021/03/11 00:00:00 | | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2021/11/26 | 2021/11/26 00:04:00 | 2021/04/11 00:00:00 | | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2021/11/25 | 2021/11/25 00:05:00 | 2021/05/11 00:00:00 | | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2021/11/24 | 2021/11/24 00:06:00 | 2021/06/11 00:00:00 | | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2021/11/23 | 2021/11/23 00:07:00 | 2021/07/11 00:00:00 | | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2021/11/22 | 2021/11/22 00:08:00 | 2021/08/11 00:00:00 | | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2021/11/21 | 2021/11/21 00:09:00 | 2021/09/11 00:00:00 | | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2021/11/20 | 2021/11/20 00:10:00 | 2021/10/11 00:00:00 | +------------+------------+-----+-----+-----+
-
DATE_SUB
-
Sintaxe
DATE DATE_SUB(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>) -
Descrição
Adiciona ou subtrai dias de um valor de data definido por startdate, conforme a quantidade especificada em delta.
NotaPara somar ou subtrair dias da hora atual, combine esta função com a função GETDATE.
Caso precise de ajustes precisos em nível de hora, minuto ou segundo, consulte a função DATEADD. Esta função suporta apenas incremento ou decremento de uma única unidade entre anos, meses, dias, horas, minutos ou segundos. Para ajustar múltiplas granularidades simultaneamente, recomenda-se o uso de uma função definida pelo usuário.
A lógica desta função é oposta à da função DATE_ADD.
-
Parâmetros
Parameter
Required
Description
startdate
Yes
A data inicial. Aceita valores dos tipos DATE, DATETIME ou STRING. Se o valor de entrada for do tipo STRING e o projeto utilizar a edição de tipos de dados MaxCompute V1.0, haverá conversão implícita para DATE antes do cálculo. Valores STRING devem conter pelo menos a parte
'yyyy-mm-dd', como'2019-12-27'.delta
Yes
Quantidade de dias a adicionar ou subtrair. Deve ser do tipo BIGINT. Se delta for maior que 0, os dias serão subtraídos da data inicial. Quando delta for menor que 0, os dias serão adicionados à data inicial. Se delta for igual a 0, a data permanece inalterada.
-
Valor de retorno
Retorna um valor do tipo DATE no formato
yyyy-mm-dd. O resultado obedece às seguintes regras:Um erro é retornado se o valor de startdate não for dos tipos DATE, DATETIME ou STRING.
Caso startdate seja null, a função retorna um erro.
O retorno será null quando o valor de delta for null.
-
Exemplos
-
Exemplos com dados estáticos
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; -- The return value is 2005-02-28. One day is subtracted. The last day of February is returned. SELECT DATE_SUB(datetime '2005-03-01 00:00:00', 1); -- The return value is 2005-03-01. One day is added. SELECT DATE_SUB(date '2005-02-28', -1); -- The return value is 2005-02-27. Two days are subtracted. SET odps.sql.type.system.odps2=false; SELECT DATE_SUB('2005-03-01 00:00:00', 2); -- If the current time is 2021-09-10 16:31:44, the return value is 2021-09-09. SELECT DATE_SUB(GETDATE(),1); -- The return value is NULL. SELECT DATE_SUB('2005-03-01 00:00:00', null); -
Exemplos com dados de tabela
Altere os valores de data nas colunas date1, datetime1 e timestamp1 conforme o número de dias definido em delta. Este exemplo baseia-se nos Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DATE_SUB(date1,1) AS date1_date_sub, datetime1, DATE_SUB(datetime1,-1) AS datetime1_date_sub, timestamp1, DATE_SUB(timestamp1,0) AS timestamp1_date_sub FROM mf_date_fun_t;Confira o resultado retornado abaixo.
+------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | date1 | date1_date_sub | datetime1 | datetime1_date_sub | timestamp1 | timestamp1_date_sub | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | 2021-11-29 | 2021-11-28 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-11 | | 2021-11-28 | 2021-11-27 | 2021-11-28 00:02:00 | 2021-11-29 | 2021-02-11 00:00:00.123456789 | 2021-02-11 | | 2021-11-27 | 2021-11-26 | 2021-11-27 00:03:00 | 2021-11-28 | 2021-03-11 00:00:00.123456789 | 2021-03-11 | | 2021-11-26 | 2021-11-25 | 2021-11-26 00:04:00 | 2021-11-27 | 2021-04-11 00:00:00.123456789 | 2021-04-11 | | 2021-11-25 | 2021-11-24 | 2021-11-25 00:05:00 | 2021-11-26 | 2021-05-11 00:00:00.123456789 | 2021-05-11 | | 2021-11-24 | 2021-11-23 | 2021-11-24 00:06:00 | 2021-11-25 | 2021-06-11 00:00:00.123456789 | 2021-06-11 | | 2021-11-23 | 2021-11-22 | 2021-11-23 00:07:00 | 2021-11-24 | 2021-07-11 00:00:00.123456789 | 2021-07-11 | | 2021-11-22 | 2021-11-21 | 2021-11-22 00:08:00 | 2021-11-23 | 2021-08-11 00:00:00.123456789 | 2021-08-11 | | 2021-11-21 | 2021-11-20 | 2021-11-21 00:09:00 | 2021-11-22 | 2021-09-11 00:00:00.123456789 | 2021-09-11 | | 2021-11-20 | 2021-11-19 | 2021-11-20 00:10:00 | 2021-11-21 | 2021-10-11 00:00:00.123456789 | 2021-10-11 | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
-
DATEDIFF
-
Sintaxe
BIGINT DATEDIFF(DATE|DATETIME|TIMESTAMP <date1>, DATE|DATETIME|TIMESTAMP <date2>, STRING <datepart>) -
Descrição
Calcula a diferença entre date1 e date2. A unidade de tempo dessa diferença é determinada por datepart.
-
Parâmetros
Parameter
Required
Description
date1 and date2
Yes
Valores dos tipos DATE, DATETIME ou TIMESTAMP. Estes parâmetros definem o minuendo e o subtraendo. Se os valores de entrada forem STRING e o projeto usar a edição de tipos de dados MaxCompute V1.0, eles serão convertidos implicitamente para DATETIME antes do cálculo.
NotaO tipo TIMESTAMP é suportado exclusivamente na edição de tipos de dados MaxCompute V2.0. Para mais detalhes, veja Data type version 2.0.
datepart
No
A unidade de tempo, fornecida como uma constante STRING.
Ao habilitar a edição de tipos de dados MaxCompute V2.0, você pode deixar datepart vazio. Valor padrão: day. Consulte o Data type version guide para saber mais sobre essa edição. Formatos EDTF também são aceitos, como
-year,-month,-mon,-dayou-hour.NotaEsta função ignora unidades inferiores àquela especificada em datepart antes de calcular o resultado.
-
Valor de retorno
O retorno é do tipo BIGINT e segue estas condições:
Retorna erro caso date1 ou date2 não sejam dos tipos DATE, DATETIME ou TIMESTAMP.
O valor retornado será negativo se date1 for menor que date2.
Null é retornado quando date1 ou date2 for null.
Se datepart for null, o resultado também será null.
-
Exemplos
-
Exemplos com dados estáticos
-
Exemplo 1
SET odps.sql.type.system.odps2=true; SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'dd');Resultado obtido:
+------------+ | _c0 | +------------+ | 1 | +------------+ -
Exemplo 2
SET odps.sql.type.system.odps2=true; SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'mm');Saída da consulta:
+------------+ | _c0 | +------------+ | 1 | +------------+ -
Exemplo 3
SELECT DATEDIFF(DATETIME '2013-05-31 13:00:00', DATETIME '2013-05-31 12:30:00','ss');Veja o retorno abaixo:
+------------+ | _c0 | +------------+ | 1800 | +------------+ -
Exemplo 4
SET odps.sql.type.system.odps2 = false; SELECT DATEDIFF('2013-05-31 13:00:00','2013-05-31 12:30:00','mi');Resposta da execução:
+------------+ | _c0 | +------------+ | 30 | +------------+ -
Exemplo 5
-- Date values that are accurate to the millisecond do not adopt the standard DATETIME format and cannot be implicitly converted into the DATETIME type. In this case, an explicit conversion is required. SELECT DATEDIFF( TO_DATE('2018-06-04 19:33:23.250','yyyy-mm-dd hh:mi:ss.ff3'), TO_DATE('2018-06-04 19:33:23.234','yyyy-mm-dd hh:mi:ss.ff3'), 'ff3');O sistema retornou:
+------------+ | _c0 | +------------+ | 16 | +------------+ -
Exemplo 6
SET odps.sql.type.system.odps2=true; SELECT DATEDIFF(DATE '2013-05-21',DATE '2013-05-10',NULL);Output gerado:
+------------+ | _c0 | +------------+ | NULL | +------------+
-
-
Exemplos com dados de tabela
Calcule as diferenças entre os valores das colunas date1 e date2, datetime1 e datetime2, além de timestamp1 e timestamp2. As diferenças seguem a unidade de tempo especificada. Utilize os Dados de amostra para este teste. Comandos de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2 = true; SELECT date1, date2, DATEDIFF(date1,date2,'dd') AS date1_date2_datediff, datetime1, datetime2, DATEDIFF(datetime1,datetime2,'dd') AS datetime1_datetime2_datediff, timestamp1, timestamp2, DATEDIFF(timestamp1,timestamp2,'mm') AS timestamp1_timestamp2_datediff FROM mf_date_fun_t;A tabela a seguir mostra o resultado.
+------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+ | date1 | date2 | date1_date2_datediff | datetime1 | datetime2 | datetime1_datetime2_datediff | timestamp1 | timestamp2 | timestamp1_timestamp2_datediff | +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+ | 2021-11-29 | 2021-10-29 | 31 | 2021-11-29 00:01:00 | 2021-10-29 00:00:00 | 31 | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9 | | 2021-11-28 | 2021-10-29 | 30 | 2021-11-28 00:02:00 | 2021-10-29 00:00:00 | 30 | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8 | | 2021-11-27 | 2021-10-29 | 29 | 2021-11-27 00:03:00 | 2021-10-29 00:00:00 | 29 | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7 | | 2021-11-26 | 2021-10-29 | 28 | 2021-11-26 00:04:00 | 2021-10-29 00:00:00 | 28 | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6 | | 2021-11-25 | 2021-10-29 | 27 | 2021-11-25 00:05:00 | 2021-10-29 00:00:00 | 27 | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5 | | 2021-11-24 | 2021-10-29 | 26 | 2021-11-24 00:06:00 | 2021-10-29 00:00:00 | 26 | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4 | | 2021-11-23 | 2021-10-29 | 25 | 2021-11-23 00:07:00 | 2021-10-29 00:00:00 | 25 | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3 | | 2021-11-22 | 2021-10-29 | 24 | 2021-11-22 00:08:00 | 2021-10-29 00:00:00 | 24 | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2 | | 2021-11-21 | 2021-10-29 | 23 | 2021-11-21 00:09:00 | 2021-10-29 00:00:00 | 23 | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1 | | 2021-11-20 | 2021-10-29 | 22 | 2021-11-20 00:10:00 | 2021-10-29 00:00:00 | 22 | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0 | +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+
-
DATEPART
-
Sintaxe
BIGINT DATEPART(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>) -
Descrição
Extrai um componente específico de um valor de date, de acordo com a unidade de tempo informada em datepart.
-
Parâmetros
Parameter
Required
Description
date
Yes
Valor dos tipos DATE, DATETIME ou TIMESTAMP. Caso a entrada seja STRING e o projeto utilize a edição MaxCompute V1.0, a conversão implícita para DATETIME ocorre antes do cálculo.
datepart
Yes
Constante do tipo STRING. Suporta notação EDTF.
A definição deste parâmetro segue as regras de conversão entre STRING e DATETIME. Use
yyyypara extrair o ano,mmpara o mês eddpara o dia. Veja as regras completas em Conversão de tipos de dados. Notações EDTF como-year,-month,-mon,-dayou-hourtambém são válidas. -
Valor de retorno
Retorna um inteiro BIGINT. Aplique as seguintes regras de validação:
Gera erro se date não pertencer aos tipos DATE, DATETIME ou TIMESTAMP.
Falha com erro quando date é null.
Produz null caso datepart seja null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2013. SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'yyyy'); -- The return value is 6. SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'mm'); -- The return value is 2013. SELECT DATEPART(DATE '2013-06-08', 'yyyy'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2013. SET odps.sql.type.system.odps2=true; SELECT DATEPART(TIMESTAMP '2013-06-08 01:10:00', 'yyyy'); -- The return value is 2013. SET odps.sql.type.system.odps2=false; SELECT DATEPART('2013-06-08 01:10:00', 'yyyy'); -- The return value is NULL. SELECT DATEPART(DATE '2013-06-08', null); -
Exemplos com dados de tabela
Extraia partes das datas nas colunas date1, datetime1 e timestamp1 usando a unidade definida em datepart. Os Dados de amostra servem de base para este exemplo. Query de demonstração:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DATEPART(date1,'yyyy') AS date1_datepart, datetime1, DATEPART(datetime1,'dd') AS datetime1_datepart, timestamp1, datepart(timestamp1,'mm') AS timestamp1_datepart FROM mf_date_fun_t;Observe a saída processada:
+------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+ | date1 | date1_datepart | datetime1 | datetime1_datepart | timestamp1 | timestamp1_datepart | +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+ | 2021-11-29 | 2021 | 2021-11-29 00:01:00 | 29 | 2021-01-11 00:00:00.123456789 | 1 | | 2021-11-28 | 2021 | 2021-11-28 00:02:00 | 28 | 2021-02-11 00:00:00.123456789 | 2 | | 2021-11-27 | 2021 | 2021-11-27 00:03:00 | 27 | 2021-03-11 00:00:00.123456789 | 3 | | 2021-11-26 | 2021 | 2021-11-26 00:04:00 | 26 | 2021-04-11 00:00:00.123456789 | 4 | | 2021-11-25 | 2021 | 2021-11-25 00:05:00 | 25 | 2021-05-11 00:00:00.123456789 | 5 | | 2021-11-24 | 2021 | 2021-11-24 00:06:00 | 24 | 2021-06-11 00:00:00.123456789 | 6 | | 2021-11-23 | 2021 | 2021-11-23 00:07:00 | 23 | 2021-07-11 00:00:00.123456789 | 7 | | 2021-11-22 | 2021 | 2021-11-22 00:08:00 | 22 | 2021-08-11 00:00:00.123456789 | 8 | | 2021-11-21 | 2021 | 2021-11-21 00:09:00 | 21 | 2021-09-11 00:00:00.123456789 | 9 | | 2021-11-20 | 2021 | 2021-11-20 00:10:00 | 20 | 2021-10-11 00:00:00.123456789 | 10 | +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
-
DATETRUNC
-
Sintaxe
DATE|DATETIME DATETRUNC(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>) -
Descrição
Trunca um valor de date conforme a granularidade definida em datepart.
-
Parâmetros
Parameter
Required
Description
date
Yes
Aceita entradas DATE, DATETIME ou TIMESTAMP. Projetos na edição MaxCompute V1.0 convertem implicitamente strings STRING para DATETIME antes de processar.
datepart
Yes
Constante STRING com suporte a EDTF.
Siga as normas de conversão STRING-DATETIME ao definir este parâmetro. Utilize
yyyypara ano,mmpara mês eddpara dia. Detalhes adicionais estão disponíveis em Conversão de tipos de dados. Opções EDTF incluem-year,-month,-mon,-daye-hour. -
Valor de retorno
Devolve um valor DATE ou DATETIME formatado como
yyyy-mm-ddouyyyy-mm-dd hh:mi:ss. Considere as restrições abaixo:Tipo inválido em date (diferente de DATE, DATETIME ou TIMESTAMP) causa erro.
Erro de execução ocorre se date for null.
Resultado null é esperado quando datepart é null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2011-01-01 00:00:00. SELECT DATETRUNC(DATETIME '2011-12-07 16:28:46', 'yyyy'); -- The return value is 2011-12-01 00:00:00. SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'month'); -- The return value is 2011-12-07 00:00:00. SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'DD'); -- The return value is 2011-01-01. SELECT DATETRUNC(DATE '2011-12-07', 'yyyy'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2011-01-01 00:00:00.0. SET odps.sql.type.system.odps2=true; SELECT DATETRUNC(TIMESTAMP '2011-12-07 16:28:46', 'yyyy'); -- The return value is 2011-01-01 00:00:00.0. SET odps.sql.type.system.odps2=false; SELECT DATETRUNC('2011-12-07 16:28:46', 'yyyy'); -- The return value is NULL. SELECT DATETRUNC(DATE '2011-12-07', null); -
Exemplos com dados de tabela
Trunque as datas presentes nas colunas date1, datetime1 e timestamp1 respeitando a unidade de tempo em datepart. Consulte os Dados de amostra para reproduzir este cenário. Script SQL:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DATETRUNC(date1,'yyyy') AS date1_datetrunc, datetime1, DATETRUNC(datetime1,'dd') AS datetime1_datetrunc, timestamp1, DATETRUNC(timestamp1,'mm') AS timestamp1_datetrunc FROM mf_date_fun_t;Listagem final dos dados truncados:
+------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+ | date1 | date1_datetrunc | datetime1 | datetime1_datetrunc | timestamp1 | timestamp1_datetrunc | +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+ | 2021-11-29 | 2021-01-01 | 2021-11-29 00:01:00 | 2021-11-29 00:00:00 | 2021-01-11 00:00:00.123456789 | 2021-01-01 00:00:00 | | 2021-11-28 | 2021-01-01 | 2021-11-28 00:02:00 | 2021-11-28 00:00:00 | 2021-02-11 00:00:00.123456789 | 2021-02-01 00:00:00 | | 2021-11-27 | 2021-01-01 | 2021-11-27 00:03:00 | 2021-11-27 00:00:00 | 2021-03-11 00:00:00.123456789 | 2021-03-01 00:00:00 | | 2021-11-26 | 2021-01-01 | 2021-11-26 00:04:00 | 2021-11-26 00:00:00 | 2021-04-11 00:00:00.123456789 | 2021-04-01 00:00:00 | | 2021-11-25 | 2021-01-01 | 2021-11-25 00:05:00 | 2021-11-25 00:00:00 | 2021-05-11 00:00:00.123456789 | 2021-05-01 00:00:00 | | 2021-11-24 | 2021-01-01 | 2021-11-24 00:06:00 | 2021-11-24 00:00:00 | 2021-06-11 00:00:00.123456789 | 2021-06-01 00:00:00 | | 2021-11-23 | 2021-01-01 | 2021-11-23 00:07:00 | 2021-11-23 00:00:00 | 2021-07-11 00:00:00.123456789 | 2021-07-01 00:00:00 | | 2021-11-22 | 2021-01-01 | 2021-11-22 00:08:00 | 2021-11-22 00:00:00 | 2021-08-11 00:00:00.123456789 | 2021-08-01 00:00:00 | | 2021-11-21 | 2021-01-01 | 2021-11-21 00:09:00 | 2021-11-21 00:00:00 | 2021-09-11 00:00:00.123456789 | 2021-09-01 00:00:00 | | 2021-11-20 | 2021-01-01 | 2021-11-20 00:10:00 | 2021-11-20 00:00:00 | 2021-10-11 00:00:00.123456789 | 2021-10-01 00:00:00 | +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
-
DAY
-
Sintaxe
INT DAY(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o dia em que um valor de data se encontra. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME, TIMESTAMP, DATE ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não pode conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME, TIMESTAMP, DATE ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The value 1 is returned. SELECT DAY('2014-09-01'); -- The return value is NULL. SELECT DAY('20140901'); -- The return value is NULL. SELECT DAY(null); -
Exemplos com dados de tabela
Obtenha o dia em que cada valor de data nas colunas date1, datetime1, timestamp1 e date3 se encontra. Os dados em Dados de amostra são usados neste exemplo. Instruções de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DAY(date1) AS date1_day, datetime1, DAY(datetime1) AS datetime1_day, timestamp1, DAY(timestamp1) AS timestamp1_day, date3, DAY(date3) AS date3_day FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+ | date1 | date1_day | datetime1 | datetime1_day | timestamp1 | timestamp1_day | date3 | date3_day | +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+ | 2021-11-29 | 29 | 2021-11-29 00:01:00 | 29 | 2021-01-11 00:00:00.123456789 | 11 | 2021-11-20 | 20 | | 2021-11-28 | 28 | 2021-11-28 00:02:00 | 28 | 2021-02-11 00:00:00.123456789 | 11 | 2021-11-21 | 21 | | 2021-11-27 | 27 | 2021-11-27 00:03:00 | 27 | 2021-03-11 00:00:00.123456789 | 11 | 2021-11-22 | 22 | | 2021-11-26 | 26 | 2021-11-26 00:04:00 | 26 | 2021-04-11 00:00:00.123456789 | 11 | 2021-11-23 | 23 | | 2021-11-25 | 25 | 2021-11-25 00:05:00 | 25 | 2021-05-11 00:00:00.123456789 | 11 | 2021-11-24 | 24 | | 2021-11-24 | 24 | 2021-11-24 00:06:00 | 24 | 2021-06-11 00:00:00.123456789 | 11 | 2021-11-25 | 25 | | 2021-11-23 | 23 | 2021-11-23 00:07:00 | 23 | 2021-07-11 00:00:00.123456789 | 11 | 2021-11-26 | 26 | | 2021-11-22 | 22 | 2021-11-22 00:08:00 | 22 | 2021-08-11 00:00:00.123456789 | 11 | 2021-11-27 | 27 | | 2021-11-21 | 21 | 2021-11-21 00:09:00 | 21 | 2021-09-11 00:00:00.123456789 | 11 | 2021-11-28 | 28 | | 2021-11-20 | 20 | 2021-11-20 00:10:00 | 20 | 2021-10-11 00:00:00.123456789 | 11 | 2021-11-29 | 29 | +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+
-
DAYOFMONTH
-
Sintaxe
INT DAYOFMONTH(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o componente de dia de um valor de data. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME, TIMESTAMP, DATE ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não pode conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME, TIMESTAMP, DATE ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The value 1 is returned. SELECT DAYOFMONTH('2014-09-01'); -- The return value is NULL. SELECT DAYOFMONTH('20140901'); -- The return value is NULL. SELECT DAYOFMONTH(null); -
Exemplos com dados de tabela
Obtenha os componentes de dia dos valores de data nas colunas date1, datetime1, timestamp1 e date3. Os dados em Dados de amostra são usados neste exemplo. Instruções de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, DAYOFMONTH(date1) AS date1_dayofmonth, datetime1, DAYOFMONTH(datetime1) AS datetime1_dayofmonth, timestamp1, DAYOFMONTH(timestamp1) AS timestamp1_dayofmonth, date3, DAYOFMONTH(date3) AS date3_dayofmonth FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | date1 | date1_dayofmonth | datetime1 | datetime1_dayofmonth | timestamp1 | timestamp1_dayofmonth | date3 | date3_dayofmonth | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | 2021-11-29 | 29 | 2021-11-29 00:01:00 | 29 | 2021-01-11 00:00:00.123456789 | 11 | 2021-11-20 | 20 | | 2021-11-28 | 28 | 2021-11-28 00:02:00 | 28 | 2021-02-11 00:00:00.123456789 | 11 | 2021-11-21 | 21 | | 2021-11-27 | 27 | 2021-11-27 00:03:00 | 27 | 2021-03-11 00:00:00.123456789 | 11 | 2021-11-22 | 22 | | 2021-11-26 | 26 | 2021-11-26 00:04:00 | 26 | 2021-04-11 00:00:00.123456789 | 11 | 2021-11-23 | 23 | | 2021-11-25 | 25 | 2021-11-25 00:05:00 | 25 | 2021-05-11 00:00:00.123456789 | 11 | 2021-11-24 | 24 | | 2021-11-24 | 24 | 2021-11-24 00:06:00 | 24 | 2021-06-11 00:00:00.123456789 | 11 | 2021-11-25 | 25 | | 2021-11-23 | 23 | 2021-11-23 00:07:00 | 23 | 2021-07-11 00:00:00.123456789 | 11 | 2021-11-26 | 26 | | 2021-11-22 | 22 | 2021-11-22 00:08:00 | 22 | 2021-08-11 00:00:00.123456789 | 11 | 2021-11-27 | 27 | | 2021-11-21 | 21 | 2021-11-21 00:09:00 | 21 | 2021-09-11 00:00:00.123456789 | 11 | 2021-11-28 | 28 | | 2021-11-20 | 20 | 2021-11-20 00:10:00 | 20 | 2021-10-11 00:00:00.123456789 | 11 | 2021-11-29 | 29 | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
-
DAYOFWEEK
-
Sintaxe
INT DAYOFWEEK(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o dia da semana em que um valor de data se encontra. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME, TIMESTAMP, DATE ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não pode conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME, TIMESTAMP, DATE ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for null, null será retornado.
O valor de retorno varia de 1 a 7. O valor 1 indica domingo, o valor 2 indica segunda-feira, e a mesma regra se aplica aos demais valores.
-
Exemplos
-- The return value is 5. The return value indicates Thursday. SELECT DAYOFWEEK('2009-07-30');
DAYOFYEAR
-
Sintaxe
INT DAYOFYEAR(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna um inteiro que representa o dia sequencial do ano. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME, TIMESTAMP, DATE ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não pode conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME, TIMESTAMP, DATE ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for null, null será retornado.
-
Exemplos
-- The return value is 100. SELECT DAYOFYEAR('2016-04-09');
EXTRACT
-
Sintaxe
INT EXTRACT(<datepart> FROM DATE|DATETIME|TIMESTAMP <date>) -
Descrição
Extrai o componente de data especificado por datepart de um valor de data especificado por date. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
datepart
Sim
O valor pode ser YEAR, MONTH, DAY, HOUR, MINUTE ou SECOND.
date
Sim
Um valor de data do tipo DATE, DATETIME, TIMESTAMP ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não deve conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de datepart não for YEAR, MONTH, DAY, HOUR, MINUTE ou SECOND, um erro será retornado.
Se o valor de datepart for null, um erro será retornado.
Se o valor de date não for do tipo DATE, DATETIME, TIMESTAMP ou STRING, ou se for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT EXTRACT(YEAR FROM '2019-05-01 11:21:00') YEAR, EXTRACT(MONTH FROM '2019-05-01 11:21:00') MONTH, EXTRACT(DAY FROM '2019-05-01 11:21:00') DAY, EXTRACT(HOUR FROM '2019-05-01 11:21:00') HOUR, EXTRACT(MINUTE FROM '2019-05-01 11:21:00') MINUTE; -- The following result is returned: +------+-------+------+------+--------+ | year | month | day | hour | minute | +------+-------+------+------+--------+ | 2019 | 5 | 1 | 11 | 21 | +------+-------+------+------+--------+ -- The return value is NULL. SELECT EXTRACT(YEAR FROM null); -
Exemplos com dados de tabela
Extraia os componentes de data especificados dos valores de data na coluna timestamp1. Os dados em Dados de amostra são usados neste exemplo. Instruções de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT timestamp1, EXTRACT(YEAR FROM timestamp1) YEAR, timestamp2, EXTRACT(MONTH from timestamp2) MONTH FROM mf_date_fun_t;O seguinte resultado é retornado.
+-------------------------------+------+-------------------------------+-------+ | timestamp1 | year | timestamp2 | month | +-------------------------------+------+-------------------------------+-------+ | 2021-01-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-02-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-03-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-04-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-05-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-06-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-07-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-08-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-09-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | | 2021-10-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10 | +-------------------------------+------+-------------------------------+-------+
-
FROM_UNIXTIME
-
Sintaxe
DATETIME FROM_UNIXTIME(BIGINT <unixtime>) -
Descrição
Converte unixtime do tipo BIGINT em um valor de data do tipo DATETIME.
-
Parâmetros
unixtime: obrigatório. Um valor de data do tipo BIGINT no formato UNIX. O valor deste parâmetro tem precisão de segundos. Valores válidos: [-62167305600, 253402387200].
NotaSe o valor de entrada for do tipo STRING, DOUBLE ou DECIMAL e a edição de tipos de dados do MaxCompute V1.0 estiver em uso no seu projeto, o valor de entrada será convertido implicitamente para o tipo BIGINT antes do cálculo.
-
Valor de retorno
Um valor do tipo DATETIME é retornado. O valor de retorno está no formato
yyyy-mm-dd hh:mi:ss. Se o valor de unixtime for null, null será retornado.NotaExecute o comando
set odps.sql.hive.compatible=true;para ativar a edição de tipos de dados compatível com Hive. Na edição compatível com Hive, observe as seguintes regras:Se o valor de entrada for do tipo STRING, um valor de data do tipo STRING será retornado.
É possível especificar o segundo parâmetro de entrada para determinar o formato do valor de retorno. Por exemplo, você pode definir o formato de data e hora do valor de retorno no segundo parâmetro de entrada como yyyy-MM-dd ou YYYY-MM-dd. yyyy representa o ano civil e YYYY representa o ano da semana. O ano da semana pode não coincidir com o ano real. Tenha cautela ao utilizar o formato de ano da semana.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 1973-11-30 05:33:09. SELECT FROM_UNIXTIME(123456789); -- The return value is 1973-11-30 05:33:09. SET odps.sql.type.system.odps2=false; SELECT FROM_UNIXTIME('123456789'); -- The return value is NULL. SELECT FROM_UNIXTIME(null); -
Exemplos com dados de tabela
Converta os valores na coluna date4 em valores de data. Os dados em Dados de amostra são usados neste exemplo. Instrução de exemplo:
SELECT date4, FROM_UNIXTIME(date4) AS date4_from_unixtime FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+---------------------+ | date4 | date4_from_unixtime | +------------+---------------------+ | 123456780 | 1973-11-30 05:33:00 | | 123456781 | 1973-11-30 05:33:01 | | 123456782 | 1973-11-30 05:33:02 | | 123456783 | 1973-11-30 05:33:03 | | 123456784 | 1973-11-30 05:33:04 | | 123456785 | 1973-11-30 05:33:05 | | 123456786 | 1973-11-30 05:33:06 | | 123456787 | 1973-11-30 05:33:07 | | 123456788 | 1973-11-30 05:33:08 | | 123456789 | 1973-11-30 05:33:09 | +------------+---------------------+
-
FROM_UTC_TIMESTAMP
-
Sintaxe
TIMESTAMP FROM_UTC_TIMESTAMP({any primitive type}*, STRING <timezone>) -
Descrição
Retorna um timestamp convertido do Horário Universal Coordenado (UTC) para um fuso horário especificado. Esta função é uma função adicional do MaxCompute V2.0.
ImportanteO valor de retorno da função FROM_UTC_TIMESTAMP também é afetado pelo valor de
odps.sql.timezoneconfigurado no seu projeto. Se você configurarodps.sql.timezone=Asia/Shanghai, o fuso horário UTC+8 será usado, o que representa 8 horas à frente do UTC. Nesse caso, 8 horas são adicionadas ao resultado do cálculo da função FROM_UTC_TIMESTAMP. Por exemplo, a funçãoFROM_UTC_TIMESTAMP(0, 'Asia/Shanghai')converte um timestamp com UTC+0 em um timestamp com o horário de Pequim (UTC+08:00), e o resultado do cálculo é0 + 8 x 3600 = 28800. A configuraçãoodps.sql.timezone=Asia/Shanghaiexige outro deslocamento de 8 horas. Como resultado, o valor de retorno é1970-01-01 16:00:00. -
Parâmetros
Parâmetro
Obrigatório
Descrição
{any primitive type}*
Sim
Um timestamp do tipo TIMESTAMP, DATETIME, TINYINT, SMALLINT, INT ou BIGINT. Se o valor for do tipo TINYINT, SMALLINT, INT ou BIGINT, a unidade de tempo tem precisão de milissegundos.
timezone
Sim
O novo fuso horário.
NotaPesquise a lista de fusos horários usando um mecanismo de busca.
-
Valor de retorno
Um valor do tipo TIMESTAMP é retornado. O valor de retorno está no formato
yyyy-mm-dd hh:mi:ss.ff3. O valor de retorno varia conforme as seguintes regras:Se o valor de {any primitive type}* não for do tipo TIMESTAMP, DATETIME, TINYINT, SMALLINT, INT ou BIGINT, um erro será retornado.
Se o valor de {any primitive type}* for null, um erro será retornado.
Se o valor de timezone for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The time unit of the input value is accurate to the millisecond and the return value is 2017-08-01 04:24:00.0. SELECT FROM_UTC_TIMESTAMP(1501557840000, 'PST'); -- The return value is 1970-01-30 08:00:00.0. SELECT FROM_UTC_TIMESTAMP('1970-01-30 16:00:00','PST'); -- The return value is 1970-01-29 16:00:00.0. SELECT FROM_UTC_TIMESTAMP('1970-01-30','PST'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2011-12-25 17:00:00:00.123. SET odps.sql.type.system.odps2=true; SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 09:00:00.123456', 'Asia/Shanghai'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2011-12-25 01:55:00.0. SET odps.sql.type.system.odps2=true; SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 06:55:00', 'America/Toronto'); -- The return value is NULL. SELECT FROM_UTC_TIMESTAMP('1970-01-30',null); -
Exemplos com dados de tabela
Converta os valores de data nas colunas datetime1 e timestamp1 em timestamps de um fuso horário especificado. Os dados em Dados de amostra são usados neste exemplo. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT datetime1, FROM_UTC_TIMESTAMP(datetime1,'PST') pst, timestamp1, FROM_UTC_TIMESTAMP(timestamp1,'Asia/Shanghai') asia FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+---------------------+-------------------------------+-------------------------------+ | datetime1 | pst | timestamp1 | asia | +---------------------+---------------------+-------------------------------+-------------------------------+ | 2021-11-29 00:01:00 | 2021-11-28 16:01:00 | 2021-01-11 00:00:00.123456789 | 2021-01-11 08:00:00.123456789 | | 2021-11-28 00:02:00 | 2021-11-27 16:02:00 | 2021-02-11 00:00:00.123456789 | 2021-02-11 08:00:00.123456789 | | 2021-11-27 00:03:00 | 2021-11-26 16:03:00 | 2021-03-11 00:00:00.123456789 | 2021-03-11 08:00:00.123456789 | | 2021-11-26 00:04:00 | 2021-11-25 16:04:00 | 2021-04-11 00:00:00.123456789 | 2021-04-11 08:00:00.123456789 | | 2021-11-25 00:05:00 | 2021-11-24 16:05:00 | 2021-05-11 00:00:00.123456789 | 2021-05-11 08:00:00.123456789 | | 2021-11-24 00:06:00 | 2021-11-23 16:06:00 | 2021-06-11 00:00:00.123456789 | 2021-06-11 08:00:00.123456789 | | 2021-11-23 00:07:00 | 2021-11-22 16:07:00 | 2021-07-11 00:00:00.123456789 | 2021-07-11 08:00:00.123456789 | | 2021-11-22 00:08:00 | 2021-11-21 16:08:00 | 2021-08-11 00:00:00.123456789 | 2021-08-11 08:00:00.123456789 | | 2021-11-21 00:09:00 | 2021-11-20 16:09:00 | 2021-09-11 00:00:00.123456789 | 2021-09-11 08:00:00.123456789 | | 2021-11-20 00:10:00 | 2021-11-19 16:10:00 | 2021-10-11 00:00:00.123456789 | 2021-10-11 08:00:00.123456789 | +---------------------+---------------------+-------------------------------+-------------------------------+
-
GETDATE
-
Sintaxe
DATETIME GETDATE() -
Descrição
Retorna a hora atual do sistema como um valor de data. O MaxCompute utiliza UTC+8 como fuso horário padrão.
-
Valor de retorno
A data e hora atuais são retornadas, sendo do tipo DATETIME.
NotaNo SQL do MaxCompute,
GETDATEsempre retorna um valor fixo. O valor de retorno é um horário arbitrário durante a execução da tarefa SQL do MaxCompute. O horário tem precisão de segundos. Se você ativar a edição de tipos de dados do MaxCompute V2.0, o horário terá precisão de milissegundos.
HOUR
-
Sintaxe
INT HOUR(DATETIME|TIMESTAMP|STRING <date>) -
Descrição
Retorna o componente de hora de um valor de data.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME, TIMESTAMP ou STRING. O valor de data deve estar no formato
yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não deve conter strings extras. Esta função é uma função adicional do MaxCompute V2.0. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME, TIMESTAMP ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 12. SELECT HOUR('2014-09-01 12:00:00'); -- The return value is 12. SELECT HOUR('12:00:00'); -- The return value is NULL. SELECT HOUR('20140901120000'); -- The return value is NULL. SELECT HOUR(null); -
Exemplos com dados de tabela
Obtenha os componentes de hora dos valores de data nas colunas datetime1 e timestamp1. Os dados em Dados de amostra são usados neste exemplo. Instruções de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT datetime1, HOUR(datetime1) AS datetime1_hour, timestamp1, HOUR(timestamp1) AS timestamp1_hour FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+----------------+-------------------------------+-----------------+ | datetime1 | datetime1_hour | timestamp1 | timestamp1_hour | +---------------------+----------------+-------------------------------+-----------------+ | 2021-11-29 00:01:00 | 0 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 0 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 0 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 0 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 0 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 0 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 0 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 0 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 0 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 0 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+----------------+-------------------------------+-----------------+
-
ISDATE
-
Sintaxe
BOOLEAN ISDATE(STRING <date>, STRING <format>) -
Descrição
Determina se uma string de data pode ser convertida em um valor de data em um formato especificado. Se a string de data puder ser convertida em um valor de data no formato especificado, true será retornado. Caso contrário, false será retornado.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
date
Sim
Um valor do tipo STRING. Se o valor de entrada for do tipo BIGINT, DOUBLE, DECIMAL ou DATETIME, o valor será convertido implicitamente para o tipo STRING antes do cálculo.
format
Sim
Uma constante do tipo STRING. Este parâmetro não suporta EDTF. Se existirem strings de formato redundantes em format, esta função converterá a string de data correspondente à primeira string de formato em um valor de data. As strings restantes serão consideradas delimitadores. Por exemplo,
isdate("1234-yyyy", "yyyy-yyyy")retorna true. -
Valor de retorno
Um valor do tipo BOOLEAN é retornado. Se o valor de date ou format for null, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is true. SELECT ISDATE('2021-10-11','yyyy-mm-dd'); -- The return value is false. SET odps.sql.type.system.odps2=false; SELECT ISDATE(1678952314,'yyyy-mm-dd'); -
Exemplos com dados de tabela
Determine se as strings de data na coluna date3 podem ser convertidas em valores de data em um formato especificado. Os dados em Dados de amostra são usados neste exemplo. Instrução de exemplo:
SELECT date3, ISDATE(date3,'yyyy-mm-dd') AS date3_isdate FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+--------------+ | date3 | date3_isdate | +------------+--------------+ | 2021-11-20 | true | | 2021-11-21 | true | | 2021-11-22 | true | | 2021-11-23 | true | | 2021-11-24 | true | | 2021-11-25 | true | | 2021-11-26 | true | | 2021-11-27 | true | | 2021-11-28 | true | | 2021-11-29 | true | +------------+--------------+
-
LAST_DAY
-
Sintaxe
STRING LAST_DAY(DATE|DATETIME|TIMESTAMP|STRING <date>) -
Descrição
Retorna o último dia do mês em que um valor de data se encontra. Esta função é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATE, DATETIME, TIMESTAMP ou STRING. Se o valor for do tipo STRING, ele deve incluir pelo menos a parte
yyyy-mm-dde não deve conter strings extras. -
Valor de retorno
Retorna um valor do tipo STRING no formato
yyyy-mm-dd. O valor retornado segue as regras abaixo:Se o valor de date não for dos tipos DATE, DATETIME, TIMESTAMP ou STRING, ou se o formato não atender aos requisitos, a função retorna null.
Se o valor de date for null, a função retornará um erro.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2017-03-31. SELECT LAST_DAY('2017-03-04'); -- The return value is 2017-07-31. SELECT LAST_DAY('2017-07-04 11:40:00'); -- The return value is NULL. SELECT LAST_DAY('20170304'); -
Exemplos com dados de tabela
Obtenha o último dia do mês correspondente a cada valor de data nas colunas date1, datetime1, timestamp1 e date3. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, LAST_DAY(date1) AS date1_lastday, datetime1, LAST_DAY(datetime1) AS datetime1_lastday, timestamp1, LAST_DAY(timestamp1) AS timestamp1_lastday, date3, LAST_DAY(date3) AS date3_lastday FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | date1 | date1_lastday | datetime1 | datetime1_lastday | timestamp1 | timestamp1_lastday | date3 | date3_lastday | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-31 | 2021-11-20 | 2021-11-30 | | 2021-11-28 | 2021-11-30 | 2021-11-28 00:02:00 | 2021-11-30 | 2021-02-11 00:00:00.123456789 | 2021-02-28 | 2021-11-21 | 2021-11-30 | | 2021-11-27 | 2021-11-30 | 2021-11-27 00:03:00 | 2021-11-30 | 2021-03-11 00:00:00.123456789 | 2021-03-31 | 2021-11-22 | 2021-11-30 | | 2021-11-26 | 2021-11-30 | 2021-11-26 00:04:00 | 2021-11-30 | 2021-04-11 00:00:00.123456789 | 2021-04-30 | 2021-11-23 | 2021-11-30 | | 2021-11-25 | 2021-11-30 | 2021-11-25 00:05:00 | 2021-11-30 | 2021-05-11 00:00:00.123456789 | 2021-05-31 | 2021-11-24 | 2021-11-30 | | 2021-11-24 | 2021-11-30 | 2021-11-24 00:06:00 | 2021-11-30 | 2021-06-11 00:00:00.123456789 | 2021-06-30 | 2021-11-25 | 2021-11-30 | | 2021-11-23 | 2021-11-30 | 2021-11-23 00:07:00 | 2021-11-30 | 2021-07-11 00:00:00.123456789 | 2021-07-31 | 2021-11-26 | 2021-11-30 | | 2021-11-22 | 2021-11-30 | 2021-11-22 00:08:00 | 2021-11-30 | 2021-08-11 00:00:00.123456789 | 2021-08-31 | 2021-11-27 | 2021-11-30 | | 2021-11-21 | 2021-11-30 | 2021-11-21 00:09:00 | 2021-11-30 | 2021-09-11 00:00:00.123456789 | 2021-09-30 | 2021-11-28 | 2021-11-30 | | 2021-11-20 | 2021-11-30 | 2021-11-20 00:10:00 | 2021-11-30 | 2021-10-11 00:00:00.123456789 | 2021-10-31 | 2021-11-29 | 2021-11-30 | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
-
LASTDAY
-
Sintaxe
DATETIME LASTDAY(DATETIME <date>) -
Descrição
Retorna o último dia do mês referente a um valor de date. Apenas o componente do dia é truncado. Os componentes de hora, minuto e segundo são expressos como
00:00:00. -
Parâmetros
date: um valor de data do tipo DATETIME. O valor da data deve estar no formato
yyyy-mm-dd hh:mi:ss. Se o valor de entrada for do tipo STRING e seu projeto utilizar a edição de tipos de dados do MaxCompute V1.0, o valor será convertido implicitamente para DATETIME antes do cálculo. -
Valor retornado
Retorna um valor do tipo DATETIME no formato
yyyy-mm-dd hh:mi:ss. O retorno obedece às seguintes regras:Caso o valor de date não seja do tipo DATETIME ou STRING, ou esteja fora do formato exigido, um erro será retornado.
Quando o valor de date for null, o resultado também será null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2013-06-30 00:00:00. SELECT LASTDAY (DATETIME '2013-06-08 01:10:00'); -- The return value is 2013-06-30 00:00:00. SET odps.sql.type.system.odps2=false; SELECT LASTDAY ('2013-06-08 01:10:00'); -- The return value is NULL. SELECT LASTDAY (null); -
Exemplos com dados de tabela
Obtenha o último dia do mês para cada valor na coluna datetime1. Utilize os Dados de amostra neste exemplo. Instrução de exemplo:
SELECT datetime1, LASTDAY(datetime1) AS datetime1_lastday FROM mf_date_fun_t;O resultado retornado é o seguinte.
+---------------------+---------------------+ | datetime1 | datetime1_lastday | +---------------------+---------------------+ | 2021-11-29 00:01:00 | 2021-11-30 00:00:00 | | 2021-11-28 00:02:00 | 2021-11-30 00:00:00 | | 2021-11-27 00:03:00 | 2021-11-30 00:00:00 | | 2021-11-26 00:04:00 | 2021-11-30 00:00:00 | | 2021-11-25 00:05:00 | 2021-11-30 00:00:00 | | 2021-11-24 00:06:00 | 2021-11-30 00:00:00 | | 2021-11-23 00:07:00 | 2021-11-30 00:00:00 | | 2021-11-22 00:08:00 | 2021-11-30 00:00:00 | | 2021-11-21 00:09:00 | 2021-11-30 00:00:00 | | 2021-11-20 00:10:00 | 2021-11-30 00:00:00 | +---------------------+---------------------+
-
MINUTE
-
Sintaxe
INT MINUTE(DATETIME|TIMESTAMP|STRING <date>) -
Descrição
Retorna o componente de minuto de um valor de data. Esta é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data dos tipos DATETIME, TIMESTAMP ou STRING. A data deve seguir o formato
yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. -
Valor retornado
Retorna um valor do tipo INT, sujeito às seguintes condições:
Retorna null se o valor de date não for dos tipos DATETIME, TIMESTAMP ou STRING, ou se o formato for inválido.
Retorna null quando o valor de date for null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 30. SELECT MINUTE('2014-09-01 12:30:00'); -- The return value is 30. SELECT MINUTE('12:30:00'); -- The return value is NULL. SELECT MINUTE('20140901120000'); -- The return value is NULL. SELECT MINUTE(null); -
Exemplos com dados de tabela
Extraia os componentes de minuto das datas nas colunas datetime1 e timestamp1. Consulte os Dados de amostra para este exemplo. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT datetime1, MINUTE(datetime1) AS datetime1_minute, timestamp1, MINUTE(timestamp1) AS timestamp1_minute FROM mf_date_fun_t;O resultado retornado é o seguinte.
+---------------------+------------------+-------------------------------+-------------------+ | datetime1 | datetime1_minute | timestamp1 | timestamp1_minute | +---------------------+------------------+-------------------------------+-------------------+ | 2021-11-29 00:01:00 | 1 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 2 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 3 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 4 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 5 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 6 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 7 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 8 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 9 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 10 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+------------------+-------------------------------+-------------------+
-
MONTH
-
Sintaxe
INT MONTH(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o mês ao qual uma data pertence. Função adicional disponível no MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Valor de data dos tipos DATETIME, TIMESTAMP, DATE ou STRING. O formato aceito é
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Para valores STRING, é necessário incluir pelo menos a parteyyyy-mm-dd, sem caracteres extras. -
Valor retornado
A função retorna um valor INT conforme as regras a seguir:
Se date não for dos tipos DATETIME, TIMESTAMP, DATE ou STRING, ou tiver formato inadequado, retorna-se null.
Se date for null, o retorno será null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 9. SELECT MONTH('2014-09-01'); -- The return value is NULL. SELECT MONTH('20140901'); -- The return value is NULL. SELECT MONTH(null); -
Exemplos com dados de tabela
Obtenha o componente de mês para cada data nas colunas date1, datetime1, timestamp1 e date3. Use os Dados de amostra como base. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, MONTH(date1) AS date1_month, datetime1, MONTH(datetime1) AS datetime1_month, timestamp1, MONTH(timestamp1) AS timestamp1_month, date3, MONTH(date3) AS date3_month FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+ | date1 | date1_month | datetime1 | datetime1_month | timestamp1 | timestamp1_month | date3 | date3_month | +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+ | 2021-11-29 | 11 | 2021-11-29 00:01:00 | 11 | 2021-01-11 00:00:00.123456789 | 1 | 2021-11-20 | 11 | | 2021-11-28 | 11 | 2021-11-28 00:02:00 | 11 | 2021-02-11 00:00:00.123456789 | 2 | 2021-11-21 | 11 | | 2021-11-27 | 11 | 2021-11-27 00:03:00 | 11 | 2021-03-11 00:00:00.123456789 | 3 | 2021-11-22 | 11 | | 2021-11-26 | 11 | 2021-11-26 00:04:00 | 11 | 2021-04-11 00:00:00.123456789 | 4 | 2021-11-23 | 11 | | 2021-11-25 | 11 | 2021-11-25 00:05:00 | 11 | 2021-05-11 00:00:00.123456789 | 5 | 2021-11-24 | 11 | | 2021-11-24 | 11 | 2021-11-24 00:06:00 | 11 | 2021-06-11 00:00:00.123456789 | 6 | 2021-11-25 | 11 | | 2021-11-23 | 11 | 2021-11-23 00:07:00 | 11 | 2021-07-11 00:00:00.123456789 | 7 | 2021-11-26 | 11 | | 2021-11-22 | 11 | 2021-11-22 00:08:00 | 11 | 2021-08-11 00:00:00.123456789 | 8 | 2021-11-27 | 11 | | 2021-11-21 | 11 | 2021-11-21 00:09:00 | 11 | 2021-09-11 00:00:00.123456789 | 9 | 2021-11-28 | 11 | | 2021-11-20 | 11 | 2021-11-20 00:10:00 | 11 | 2021-10-11 00:00:00.123456789 | 10 | 2021-11-29 | 11 | +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+
-
MONTHS_BETWEEN
-
Sintaxe
DOUBLE MONTHS_BETWEEN(DATETIME|TIMESTAMP|DATE|STRING <date1>, DATETIME|TIMESTAMP|DATE|STRING <date2>) -
Descrição
Calcula a quantidade de meses entre date1 e date2. Recurso adicional do MaxCompute V2.0.
-
Parâmetros
date1 e date2: obrigatórios. Valores dos tipos DATETIME, TIMESTAMP, DATE ou STRING nos formatos
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. Se forem strings, devem conter no mínimo a parteyyyy-mm-dde não podem ter caracteres adicionais. -
Valor retornado
Retorna um valor DOUBLE de acordo com as seguintes regras:
Positivo quando date1 for posterior a date2; negativo quando date2 for posterior a date1.
Inteiro representando meses completos caso date1 e date2 sejam os últimos dias de seus respectivos meses. Caso contrário, aplica-se a fórmula: (date1 - date2)/31.
Null se date1 ou date2 for null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 3.9495967741935485. SELECT MONTHS_BETWEEN('1997-02-28 10:30:00', '1996-10-30'); -- The return value is -3.9495967741935485. SELECT MONTHS_BETWEEN('1996-10-30','1997-02-28 10:30:00' ); -- The return value is -3.0. SELECT MONTHS_BETWEEN('1996-09-30','1996-12-31'); -- The return value is NULL. SELECT MONTHS_BETWEEN('1996-09-30', null); -
Exemplos com dados de tabela
Calcule a diferença em meses entre os valores das colunas timestamp1 e timestamp2. Baseie-se nos Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT timestamp1, timestamp2, MONTHS_BETWEEN(timestamp1, timestamp2) FROM mf_date_fun_t;O resultado retornado é o seguinte.
+-------------------------------+-------------------------------+------------+ | timestamp1 | timestamp2 | _c2 | +-------------------------------+-------------------------------+------------+ | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9.0 | | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8.0 | | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7.0 | | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6.0 | | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5.0 | | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4.0 | | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3.0 | | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2.0 | | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1.0 | | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0.0 | +------------+------------+------------+
-
NEXT_DAY
-
Sintaxe
STRING NEXT_DAY(TIMESTAMP|DATE|DATETIME|STRING <startdate>, STRING <week>) -
Descrição
Retorna a data do primeiro dia posterior a startdate que corresponda ao dia da semana especificado em week. Ou seja, fornece a data do dia indicado na próxima semana. Disponível como função adicional no MaxCompute V2.0.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
startdate
Sim
Valor de data dos tipos DATE, DATETIME, TIMESTAMP ou STRING. Formatos aceitos:
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. Valores STRING precisam conter ao menosyyyy-mm-dde não admitir textos extras.week
Sim
Valor STRING indicando o dia da semana. Aceita as duas ou três primeiras letras ou o nome completo do dia, como MO, TUE ou FRIDAY.
-
Valor retornado
Retorna uma STRING no formato
yyyy-mm-dd, observando as condições abaixo:Retorna null se date não for TIMESTAMP, DATE, DATETIME ou STRING, ou estiver em formato inválido.
Gera erro quando date for null.
Retorna null caso week seja null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2017-08-08. SELECT NEXT_DAY('2017-08-01','TU'); -- The return value is 2017-08-08. SELECT NEXT_DAY('2017-08-01 23:34:00', 'TU'); -- The return value is NULL. SELECT NEXT_DAY('20170801','TU'); -- The return value is NULL. SELECT NEXT_DAY('2017-08-01 23:34:00', null); -
Exemplos com dados de tabela
Determine a data do dia da semana seguinte correspondente a cada valor nas colunas date1, datetime1, timestamp1 e date3. Utilize os Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, NEXT_DAY(date1,'MON') AS date1_next_day, datetime1, NEXT_DAY(datetime1,'TUE') AS datetime1_next_day, timestamp1, NEXT_DAY(timestamp1,'WED') AS timestamp1_next_day, date3, NEXT_DAY(date3,'THU') AS date3_next_day FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+ | date1 | date1_next_day | datetime1 | datetime1_next_day | timestamp1 | timestamp1_next_day | date3 | date3_next_day | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+ | 2021-11-29 | 2021-12-06 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-13 | 2021-11-20 | 2021-11-25 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-11-30 | 2021-02-11 00:00:00.123456789 | 2021-02-17 | 2021-11-21 | 2021-11-25 | | 2021-11-27 | 2021-11-29 | 2021-11-27 00:03:00 | 2021-11-30 | 2021-03-11 00:00:00.123456789 | 2021-03-17 | 2021-11-22 | 2021-11-25 | | 2021-11-26 | 2021-11-29 | 2021-11-26 00:04:00 | 2021-11-30 | 2021-04-11 00:00:00.123456789 | 2021-04-14 | 2021-11-23 | 2021-11-25 | | 2021-11-25 | 2021-11-29 | 2021-11-25 00:05:00 | 2021-11-30 | 2021-05-11 00:00:00.123456789 | 2021-05-12 | 2021-11-24 | 2021-11-25 | | 2021-11-24 | 2021-11-29 | 2021-11-24 00:06:00 | 2021-11-30 | 2021-06-11 00:00:00.123456789 | 2021-06-16 | 2021-11-25 | 2021-12-02 | | 2021-11-23 | 2021-11-29 | 2021-11-23 00:07:00 | 2021-11-30 | 2021-07-11 00:00:00.123456789 | 2021-07-14 | 2021-11-26 | 2021-12-02 | | 2021-11-22 | 2021-11-29 | 2021-11-22 00:08:00 | 2021-11-23 | 2021-08-11 00:00:00.123456789 | 2021-08-18 | 2021-11-27 | 2021-12-02 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-11-23 | 2021-09-11 00:00:00.123456789 | 2021-09-15 | 2021-11-28 | 2021-12-02 | | 2021-11-20 | 2021-11-22 | 2021-11-20 00:10:00 | 2021-11-23 | 2021-10-11 00:00:00.123456789 | 2021-10-13 | 2021-11-29 | 2021-12-02 | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
-
NOW
-
Sintaxe
DATETIME NOW() -
Descrição
Retorna a data e a hora atuais do sistema.
-
Valor retornado
Retorna um valor DATETIME no formato
yyyy-mm-dd hh:mi:ss.SSS. -
Exemplos
-
Sem especificação de formato. A parte dos milissegundos no valor retornado pode conter 1, 2 ou 3 dígitos.
SELECT NOW();O resultado retornado é o seguinte.
+------+ | _c0 | +------+ | 2023-06-13 10:53:24.967 | +------+ -
Com formato de hora especificado.
SELECT DATE_FORMAT(NOW(),'yyyy-MM-dd hh:mi:ss.SSS');O resultado retornado é o seguinte.
+-----+ | _c0 | +-----+ | 2023-06-13 10:53:53.899 | +-----+
-
QUARTER
-
Sintaxe
INT QUARTER(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o trimestre correspondente a uma data. Valores válidos: 1 a 4. Função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Data dos tipos DATETIME, TIMESTAMP, DATE ou STRING. Deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Strings devem incluir minimamenteyyyy-mm-dde não permitir caracteres adicionais. -
Valor retornado
Retorna um inteiro (INT) seguindo estas regras:
Null se date não for DATETIME, TIMESTAMP, DATE ou STRING, ou apresentar formato incorreto.
Null quando date for null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 4. SELECT QUARTER('1970-11-12 10:00:00'); -- The return value is 4. SELECT QUARTER('1970-11-12'); -- The return value is NULL. SELECT QUARTER(null); -
Exemplos com dados de tabela
Identifique o trimestre de cada data nas colunas date1, datetime1, timestamp1 e date3. Consulte os Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, QUARTER(date1) AS date1_quarter, datetime1, QUARTER(datetime1) AS datetime1_quarter, timestamp1, QUARTER(timestamp1) AS timestamp1_quarter, date3, QUARTER(date3) AS date3_quarter FROM mf_date_fun_t;O resultado retornado é o seguinte.
+------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | date1 | date1_quarter | datetime1 | datetime1_quarter | timestamp1 | timestamp1_quarter | date3 | date3_quarter | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | 2021-11-29 | 4 | 2021-11-29 00:01:00 | 4 | 2021-01-11 00:00:00.123456789 | 1 | 2021-11-20 | 4 | | 2021-11-28 | 4 | 2021-11-28 00:02:00 | 4 | 2021-02-11 00:00:00.123456789 | 1 | 2021-11-21 | 4 | | 2021-11-27 | 4 | 2021-11-27 00:03:00 | 4 | 2021-03-11 00:00:00.123456789 | 1 | 2021-11-22 | 4 | | 2021-11-26 | 4 | 2021-11-26 00:04:00 | 4 | 2021-04-11 00:00:00.123456789 | 2 | 2021-11-23 | 4 | | 2021-11-25 | 4 | 2021-11-25 00:05:00 | 4 | 2021-05-11 00:00:00.123456789 | 2 | 2021-11-24 | 4 | | 2021-11-24 | 4 | 2021-11-24 00:06:00 | 4 | 2021-06-11 00:00:00.123456789 | 2 | 2021-11-25 | 4 | | 2021-11-23 | 4 | 2021-11-23 00:07:00 | 4 | 2021-07-11 00:00:00.123456789 | 3 | 2021-11-26 | 4 | | 2021-11-22 | 4 | 2021-11-22 00:08:00 | 4 | 2021-08-11 00:00:00.123456789 | 3 | 2021-11-27 | 4 | | 2021-11-21 | 4 | 2021-11-21 00:09:00 | 4 | 2021-09-11 00:00:00.123456789 | 3 | 2021-11-28 | 4 | | 2021-11-20 | 4 | 2021-11-20 00:10:00 | 4 | 2021-10-11 00:00:00.123456789 | 4 | 2021-11-29 | 4 | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
-
SECOND
-
Sintaxe
INT SECOND(DATETIME|TIMESTAMP|STRING <date>) -
Descrição
Extrai o componente de segundos de uma data. Recurso adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Data dos tipos DATETIME, TIMESTAMP ou STRING, formatada como
yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. -
Valor retornado
Retorna um valor INT conforme as condições:
Null se date não for DATETIME, TIMESTAMP ou STRING, ou tiver formato incompatível.
Null caso date seja null.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 45. SELECT SECOND('2014-09-01 12:30:45'); -- The return value is 45. SELECT SECOND('12:30:45'); -- The return value is NULL. SELECT SECOND('20140901123045'); -- The return value is NULL. SELECT SECOND(null); -
Exemplos com dados de tabela
Obtenha os segundos das datas nas colunas datetime1 e timestamp1. Utilize os Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT datetime1, SECOND(datetime1) AS datetime1_second, timestamp1, SECOND(timestamp1) AS timestamp1_second FROM mf_date_fun_t;O resultado retornado é o seguinte.
+---------------------+------------------+-------------------------------+-------------------+ | datetime1 | datetime1_second | timestamp1 | timestamp1_second | +---------------------+------------------+-------------------------------+-------------------+ | 2021-11-29 00:01:00 | 0 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 0 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 0 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 0 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 0 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 0 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 0 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 0 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 0 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 0 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+------------------+-------------------------------+-------------------+
-
TO_CHAR
-
Sintaxe
STRING TO_CHAR(DATETIME <date>, STRING <format>) -
Descrição
Converte um valor date do tipo DATETIME em uma string conforme o format definido.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
date
Sim
Valor de data do tipo DATETIME no formato
yyyy-mm-dd hh:mi:ss. Se a entrada for STRING e o projeto usar a edição de tipos de dados do MaxCompute V1.0, ocorre conversão implícita para DATETIME antes do cálculo.format
Sim
Constante STRING. No valor de format, a parte referente ao formato de data é substituída pelos dados correspondentes, enquanto os demais caracteres permanecem inalterados na saída.
-
Valor retornado
Um valor do tipo STRING é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME ou STRING, um erro será retornado.
Se o valor de date for nulo, um erro será retornado.
Se o valor de format for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-
Exemplo 1
--If the MaxCompute client runs in Windows, Chinese characters may not be properly displayed in the returned result. SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','Alibaba Finance yyyy-mm*dd');O seguinte resultado é retornado.
+------------+ | _c0 | +------------+ | Alibaba Finance 2010-12*03 | +------------+ -
Exemplo 2
SELECT TO_CHAR(DATETIME '2008-07-18 00:00:00','yyyymmdd');O seguinte resultado é retornado.
+------------+ | _c0 | +------------+ | 20080718 | +------------+ -
Exemplo 3
SET odps.sql.type.system.odps2=false; SELECT TO_CHAR('2008-07-18 00:00:00', 'yyyymmdd');O seguinte resultado é retornado.
+------------+ | _c0 | +------------+ | 20080718 | +------------+ -
Exemplo 4
-- 'Alibaba 2010-12*3' cannot be converted into a standard date value, and an error is returned. SELECT TO_CHAR(DATETIME 'Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd'); -
Exemplo 5
--'20102401' is not a standard date value, and an error is returned. SELECT TO_CHAR(DATETIME '20102401', 'yyyy'); -
Exemplo 6
SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00', null);O seguinte resultado é retornado.
+------------+ | _c0 | +------------+ | NULL | +------------+
-
-
Exemplos com dados de tabela
Converta valores de data na coluna datetime1 em strings no formato especificado. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
SELECT datetime1, TO_CHAR(datetime1,'yyyy-mm-dd') AS datetime1_to_char FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+-------------------+ | datetime1 | datetime1_to_char | +---------------------+-------------------+ | 2021-11-29 00:01:00 | 2021-11-29 | | 2021-11-28 00:02:00 | 2021-11-28 | | 2021-11-27 00:03:00 | 2021-11-27 | | 2021-11-26 00:04:00 | 2021-11-26 | | 2021-11-25 00:05:00 | 2021-11-25 | | 2021-11-24 00:06:00 | 2021-11-24 | | 2021-11-23 00:07:00 | 2021-11-23 | | 2021-11-22 00:08:00 | 2021-11-22 | | 2021-11-21 00:09:00 | 2021-11-21 | | 2021-11-20 00:10:00 | 2021-11-20 | +---------------------+-------------------+
-
TO_DATE
-
Sintaxe
DATETIME|DATE TO_DATE(STRING <date>[, STRING <format>]) -
Descrição
Converte uma string em um valor de date no format especificado.
-
Parâmetros
Parameter
Required
Description
date
Yes
Um valor de data do tipo STRING. Este parâmetro especifica a string de data que você deseja converter. Se o valor de entrada for dos tipos de dados BIGINT, DOUBLE, DECIMAL ou DATETIME, ele será convertido implicitamente para o tipo STRING antes do cálculo. A string de data também pode estar no formato ISO 8601.
format
No
Uma constante do tipo STRING. Este parâmetro especifica o formato da data. format não oferece suporte a EDTF. Outros caracteres são ignorados como inválidos durante a análise.
O valor deve conter
yyyy. Caso contrário, NULL será retornado. Se existirem strings de formato redundantes em format, esta função converte a string de data correspondente à primeira string de formato em um valor de data. As strings restantes são consideradas delimitadores. Por exemplo,TO_DATE("1234-2234", "yyyy-yyyy")retorna1234-01-01 00:00:00.yyyyindica um ano de 4 dígitos.mmindica um mês de 2 dígitos.ddindica um dia de 2 dígitos.hhindica uma hora baseada no relógio de 24 horas.miindica minutos de 2 dígitos.ssindica segundos de 2 dígitos.ff3indica milissegundos de 3 dígitos.
-
Valor de retorno
Um valor do tipo DATE ou DATETIME é retornado.
Se o parâmetro format não estiver incluído nos parâmetros de entrada e a string a ser convertida estiver no formato yyyy-mm-dd ou
yyyy-mm-dd hh:mi:ss, um valor do tipo DATE no formatoyyyy-mm-ddserá retornado. Se o parâmetro format não estiver incluído nos parâmetros de entrada e a string a ser convertida não estiver no formato yyyy-mm-dd ou yyyy-mm-dd hh:mi:ss, null será retornado.Se o parâmetro format estiver incluído nos parâmetros de entrada, um valor do tipo DATETIME no formato
yyyy-mm-dd hh:mi:ssserá retornado. Se o valor de date ou format for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 2010-12-03 00:00:00. SELECT TO_DATE('Alibaba 2010-12*03', 'Alibaba yyyy-mm*dd'); -- The return value is 2008-07-18 00:00:00. SELECT TO_DATE('20080718', 'yyyymmdd'); -- The return value is 2008-07-18 20:30:00. SELECT TO_DATE('200807182030','yyyymmddhhmi'); -- '2008718' cannot be converted to a standard date value, and an error is returned. The value must be written as '20080718'. SELECT TO_DATE('2008718', 'yyyymmdd'); -- 'Alibaba 2010-12*3' cannot be converted into a standard date value, and an error is returned. The value must be written as 'Alibaba 2010-12*03'. SELECT TO_DATE('Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd'); -- '2010-24-01' cannot be converted into a standard date value, and an error is returned. The value must be written as '2010-01-24'. SELECT TO_DATE('2010-24-01', 'yyyy-mm-dd'); -- The return value is 2018-10-30 15:13:12. SELECT TO_DATE('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3'); -- The return value is NULL. SELECT TO_DATE(null,'yyyymmdd hh-mi-ss.ff3'); -- The return value is NULL. SELECT TO_DATE('20181030 15-13-12.345', null); -- If the input value is in the ISO 8601 format, the return value is 2021-09-24 13:39:34. SELECT TO_DATE('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z'); -- The return value is 2021-09-24, and the data type is DATE. SELECT TO_DATE('2021-09-24'); -- The return value is 2021-09-24, and the data type is DATE. SELECT TO_DATE('2021-09-24 13:39:34'); -- The return value is NULL. SELECT TO_DATE('20210924'); -
Exemplos com dados de tabela
Converta valores de data na coluna date3 em valores de data no formato especificado. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
SELECT date3, TO_DATE(date3, 'yyyy-mm-dd') AS date3_to_date FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+---------------------+ | date3 | date3_to_date | +------------+---------------------+ | 2021-11-20 | 2021-11-20 00:00:00 | | 2021-11-21 | 2021-11-21 00:00:00 | | 2021-11-22 | 2021-11-22 00:00:00 | | 2021-11-23 | 2021-11-23 00:00:00 | | 2021-11-24 | 2021-11-24 00:00:00 | | 2021-11-25 | 2021-11-25 00:00:00 | | 2021-11-26 | 2021-11-26 00:00:00 | | 2021-11-27 | 2021-11-27 00:00:00 | | 2021-11-28 | 2021-11-28 00:00:00 | | 2021-11-29 | 2021-11-29 00:00:00 | +------------+---------------------+
-
TO_MILLIS
-
Sintaxe
BIGINT TO_MILLIS(DATETIME|TIMESTAMP <date>); -
Descrição
Converte um valor de date em um timestamp UNIX com precisão de milissegundos. Esta é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data do tipo DATETIME ou TIMESTAMP. O valor da data deve estar no formato
yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss.ff3. -
Valor de retorno
Um valor do tipo BIGINT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME ou TIMESTAMP, um erro será retornado.
Se o valor de date for nulo, um erro será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 1617174900000. SELECT TO_MILLIS(datetime '2021-03-31 15:15:00'); -- The return value is 1617174900000. SET odps.sql.type.system.odps2=true; SELECT TO_MILLIS(timestamp '2021-03-31 15:15:00'); -
Exemplos com dados de tabela
Converta valores de data nas colunas datetime1 e timestamp1 em timestamps UNIX com precisão de milissegundos. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT datetime1, TO_MILLIS(datetime1) AS datetime1_to_millis, timestamp1, TO_MILLIS(timestamp1) AS timestamp1_to_millis FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+---------------------+-------------------------------+----------------------+ | datetime1 | datetime1_to_millis | timestamp1 | timestamp1_to_millis | +---------------------+---------------------+-------------------------------+----------------------+ | 2021-11-29 00:01:00 | 1638115260000 | 2021-01-11 00:00:00.123456789 | 1610294400123 | | 2021-11-28 00:02:00 | 1638028920000 | 2021-02-11 00:00:00.123456789 | 1612972800123 | | 2021-11-27 00:03:00 | 1637942580000 | 2021-03-11 00:00:00.123456789 | 1615392000123 | | 2021-11-26 00:04:00 | 1637856240000 | 2021-04-11 00:00:00.123456789 | 1618070400123 | | 2021-11-25 00:05:00 | 1637769900000 | 2021-05-11 00:00:00.123456789 | 1620662400123 | | 2021-11-24 00:06:00 | 1637683560000 | 2021-06-11 00:00:00.123456789 | 1623340800123 | | 2021-11-23 00:07:00 | 1637597220000 | 2021-07-11 00:00:00.123456789 | 1625932800123 | | 2021-11-22 00:08:00 | 1637510880000 | 2021-08-11 00:00:00.123456789 | 1628611200123 | | 2021-11-21 00:09:00 | 1637424540000 | 2021-09-11 00:00:00.123456789 | 1631289600123 | | 2021-11-20 00:10:00 | 1637338200000 | 2021-10-11 00:00:00.123456789 | 1633881600123 | +---------------------+---------------------+-------------------------------+----------------------+
-
TRUNC_TIME
-
Formato do comando
string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>) -
Descrição
Trunca dados do tipo data ou hora conforme a unidade de tempo especificada por datepart e retorna um dado do tipo STRING.
-
Parâmetros
date: Obrigatório. Suporta os tipos DATE, DATETIME, TIMESTAMP ou TIMESTAMP_NTZ. Se a entrada for do tipo STRING e a versão do tipo de dados do projeto MaxCompute for 1.0, ela será convertida implicitamente para o tipo DATETIME antes do cálculo.
datepart: Obrigatório. Constante do tipo STRING, sem distinção entre maiúsculas e minúsculas, com suporte para
year,month,dayehour.
-
Valor de retorno
Retorna o tipo STRING.
O formato STRING é o seguinte:
Quando datepart é 'year': Retorna o formato STRING
yyyy.Quando datepart é 'month': Retorna o formato STRING
yyyy-mm.Quando datepart é 'day': Retorna o formato STRING
yyyy-mm-dd.Quando datepart é 'hour': Retorna o formato STRING
yyyy-mm-dd hh:mm:ss.
Regras de retorno:
Quando date não for do tipo DATE, DATETIME, TIMESTAMP ou TIMESTAMP_NTZ, um erro será retornado. O tipo STRING para date só é suportado quando a versão do tipo de dados do projeto MaxCompute é 1.0.
Quando datepart for NULL, um erro será retornado.
-
Exemplos
-
Hora como tipo DATETIME
Por exemplo, quando o fuso horário da Sessão ou Projeto atual é UTC+8 e a hora local é datetime '2025-06-03 07:15:08', a função TRUNC_TIME primeiro converte a hora local para a hora UTC '2025-06-02 23:15:08', depois trunca conforme datepart e retorna o resultado como tipo STRING.
SET odps.sql.timezone=Asia/Shanghai; SELECT TRUNC_TIME(datetime '2025-06-03 07:15:08','year') as tc_year, TRUNC_TIME(datetime '2025-06-03 07:15:08','month') as tc_month, TRUNC_TIME(datetime '2025-06-03 07:15:08','day') as tc_date, TRUNC_TIME(datetime '2025-06-03 07:15:08','hour') as tc_hour;O seguinte resultado é retornado.
+------------+------------+------------+------------+ | tc_year | tc_month | tc_date | tc_hour | +------------+------------+------------+------------+ | 2025 | 2025-06 | 2025-06-02 | 2025-06-02 23:00:00 | +------------+------------+------------+------------+ -
Hora como tipo DATE
Por exemplo, se a hora de entrada for date '2025-06-10', a função TRUNC_TIME trunca os dados do tipo DATE conforme a unidade de tempo especificada por datepart e retorna o tipo STRING.
SELECT TRUNC_TIME(date '2025-06-10','year' ), TRUNC_TIME(date '2025-06-10','month' ), TRUNC_TIME(date '2025-06-10','day' );O seguinte resultado é retornado.
+------------+------------+------------+ | _c0 | _c1 | _c2 | +------------+------------+------------+ | 2025 | 2025-06 | 2025-06-10 | +------------+------------+------------+ -
Hora como tipo STRING
Por exemplo, se a hora de entrada for do tipo STRING '2025-06-03 15:30:30'. Você deve definir a versão do tipo de dados do projeto MaxCompute como 1.0 para que ela seja convertida implicitamente para o tipo DATETIME antes do cálculo. Caso contrário, um erro será retornado.
SET odps.sql.type.system.odps2=false; SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');O seguinte resultado é retornado.
+------------+ | _c0 | +------------+ | 2025-06-03 07:00:00 | +------------+
-
UNIX_TIMESTAMP
-
Sintaxe
BIGINT UNIX_TIMESTAMP(DATETIME|DATE|TIMESTAMP|STRING <date>) -
Descrição
Converte um valor de date em um timestamp UNIX que é um número inteiro.
-
Parâmetros
date: obrigatório. Um valor de data dos tipos DATETIME, DATE, TIMESTAMP ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd hh:mi:ss,yyyy-mm-ddouyyyy-mm-dd hh:mi:ss.ff3. Se o valor de entrada for do tipo STRING e a edição de tipo de dados MaxCompute V1.0 for usada em seu projeto, o valor de entrada será convertido implicitamente em um valor do tipo DATETIME antes do cálculo. Para obter mais informações sobre a edição de tipo de dados MaxCompute V1.0, consulte Versão do tipo de dados 1.0. Se você ativar a edição de tipo de dados MaxCompute V2.0, a conversão implícita falhará. Nesse caso, use a funçãoCAST, comounix_timestamp(cast(... as datetime)), para converter os tipos de dados. Você também pode desativar a edição de tipo de dados MaxCompute V2.0. Para obter mais informações sobre a edição de tipo de dados MaxCompute V2.0, consulte Versão do tipo de dados 2.0.NotaSe o valor de entrada for uma constante e não um valor na tabela, ele deverá estar no formato
DATETIME'yyyy-mm-dd hh:mi:ss',DATE'yyyy-mm-dd'ouTIMESTAMP'yyyy-mm-dd hh:mi:ss.ff3'. Se o valor de entrada não contiver a palavra-chave do tipo de dados e estiver no formato'yyyy-mm-dd hh:mi:ss', ele será reconhecido como um valor do tipo STRING. -
Valor de retorno
Um timestamp UNIX do tipo BIGINT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for dos tipos DATETIME, DATE, TIMESTAMP ou STRING, ou se o formato não atender aos requisitos, um erro ou null será retornado.
Se o valor de date for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 1699585860. SELECT UNIX_TIMESTAMP(DATETIME'2023-11-10 11:11:00'); -- The return value is 1699545600. SET odps.sql.type.system.odps2=true; SELECT UNIX_TIMESTAMP(DATE'2023-11-10'); -- The return value is 1699585860. SET odps.sql.type.system.odps2=true; SELECT UNIX_TIMESTAMP(TIMESTAMP'2023-11-10 11:11:00.123456789'); -- The return value is 1237518660. SET odps.sql.type.system.odps2=false; SELECT UNIX_TIMESTAMP('2009-03-20 11:11:00'); -- The return value is NULL. SELECT UNIX_TIMESTAMP(null); -
Exemplos com dados de tabela
Converta valores de data nas colunas date1, datetime1 e timestamp1 em timestamps UNIX que são números inteiros. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, UNIX_TIMESTAMP(date1) AS date1_unix_timestamp, datetime1, UNIX_TIMESTAMP(datetime1) AS datetime1_unix_timestamp, timestamp1, UNIX_TIMESTAMP(timestamp1) AS timestamp1_unix_timestamp FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+ | date1 | date1_unix_timestamp | datetime1 | datetime1_unix_timestamp | timestamp1 | timestamp1_unix_timestamp | +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+ | 2021-11-29 | 1638115200 | 2021-11-29 00:01:00 | 1638115260 | 2021-01-11 00:00:00.123456789 | 1610294400 | | 2021-11-28 | 1638028800 | 2021-11-28 00:02:00 | 1638028920 | 2021-02-11 00:00:00.123456789 | 1612972800 | | 2021-11-27 | 1637942400 | 2021-11-27 00:03:00 | 1637942580 | 2021-03-11 00:00:00.123456789 | 1615392000 | | 2021-11-26 | 1637856000 | 2021-11-26 00:04:00 | 1637856240 | 2021-04-11 00:00:00.123456789 | 1618070400 | | 2021-11-25 | 1637769600 | 2021-11-25 00:05:00 | 1637769900 | 2021-05-11 00:00:00.123456789 | 1620662400 | | 2021-11-24 | 1637683200 | 2021-11-24 00:06:00 | 1637683560 | 2021-06-11 00:00:00.123456789 | 1623340800 | | 2021-11-23 | 1637596800 | 2021-11-23 00:07:00 | 1637597220 | 2021-07-11 00:00:00.123456789 | 1625932800 | | 2021-11-22 | 1637510400 | 2021-11-22 00:08:00 | 1637510880 | 2021-08-11 00:00:00.123456789 | 1628611200 | | 2021-11-21 | 1637424000 | 2021-11-21 00:09:00 | 1637424540 | 2021-09-11 00:00:00.123456789 | 1631289600 | | 2021-11-20 | 1637337600 | 2021-11-20 00:10:00 | 1637338200 | 2021-10-11 00:00:00.123456789 | 1633881600 | +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
-
WEEKDAY
-
Sintaxe
BIGINT WEEKDAY(DATETIME <date>) -
Descrição
Retorna um número que representa o dia da semana em que um valor de date se encontra.
-
Parâmetros
date: obrigatório. Um valor do tipo DATETIME. O valor da data deve estar no formato
yyyy-mm-dd hh:mi:ss. Se o valor de entrada for do tipo STRING e a edição de tipo de dados MaxCompute V1.0 for usada em seu projeto, o valor de entrada será convertido implicitamente para o tipo DATETIME antes do cálculo. -
Valor de retorno
Um valor do tipo BIGINT é retornado. O valor de retorno varia conforme as seguintes regras:
Segunda-feira é considerada o primeiro dia da semana e seu valor de retorno é 0. Os dias da semana são numerados em ordem crescente começando do 0. O valor de retorno para domingo é 6.
Se o valor de date não for do tipo DATETIME ou STRING, ou se o formato não atender aos requisitos, um erro será retornado.
Se o valor de date for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 4. SELECT WEEKDAY(datetime '2009-03-20 11:11:00'); -- The return value is 4. SET odps.sql.type.system.odps2=false; SELECT WEEKDAY('2009-03-20 11:11:00'); -- The return value is NULL. SELECT WEEKDAY(null); -
Exemplos com dados de tabela
Calcule o dia da semana em que cada valor de data na coluna datetime1 se encontra. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
SELECT datetime1, WEEKDAY(datetime1) AS datetime1_weekday FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+-------------------+ | datetime1 | datetime1_weekday | +---------------------+-------------------+ | 2021-11-29 00:01:00 | 0 | | 2021-11-28 00:02:00 | 6 | | 2021-11-27 00:03:00 | 5 | | 2021-11-26 00:04:00 | 4 | | 2021-11-25 00:05:00 | 3 | | 2021-11-24 00:06:00 | 2 | | 2021-11-23 00:07:00 | 1 | | 2021-11-22 00:08:00 | 0 | | 2021-11-21 00:09:00 | 6 | | 2021-11-20 00:10:00 | 5 | +---------------------+-------------------+
-
WEEKOFYEAR
-
Sintaxe
BIGINT WEEKOFYEAR(DATETIME <date>) -
Descrição
Retorna um número que representa a semana do ano em que um valor de data se encontra. Segunda-feira é considerada o primeiro dia da semana.
NotaPara determinar se uma semana pertence ao ano atual ou ao próximo ano, encontre o ano em que mais de quatro dias da semana se encontram. Se a semana pertencer ao ano atual, ela será considerada a última semana do ano. Se a semana pertencer ao próximo ano, ela será considerada a primeira semana do próximo ano.
-
Parâmetros
date: obrigatório. Um valor do tipo DATETIME. O valor da data deve estar no formato
yyyy-mm-dd hh:mi:ss. Se o valor de entrada for do tipo STRING e a edição de tipo de dados MaxCompute V1.0 for usada em seu projeto, o valor de entrada será convertido implicitamente para o tipo DATETIME antes do cálculo. -
Valor de retorno
Um valor do tipo BIGINT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for do tipo DATETIME ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The value 1 is returned. 20141229 is in year 2014, but most days of the week fall in year 2015. Therefore, the return value 1 indicates the first week of year 2015. SELECT WEEKOFYEAR(TO_DATE("20141229", "yyyymmdd")); -- The return value is 1. SELECT WEEKOFYEAR(TO_DATE("20141231", "yyyymmdd")); -- The return value is 53. SELECT WEEKOFYEAR(TO_DATE("20151229", "yyyymmdd")); -- The return value is 48. SET odps.sql.type.system.odps2=false; SELECT WEEKOFYEAR('2021-11-29 00:01:00'); -- The return value is NULL. SELECT WEEKOFYEAR('20141231'); -- The return value is NULL. SELECT WEEKOFYEAR(null); -
Exemplos com dados de tabela
Calcule a enésima semana do ano em que cada data na coluna datetime1 se encontra. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
SELECT datetime1, WEEKOFYEAR(datetime1) AS datetime1_weekofyear FROM mf_date_fun_t;O seguinte resultado é retornado.
+---------------------+----------------------+ | datetime1 | datetime1_weekofyear | +---------------------+----------------------+ | 2021-11-29 00:01:00 | 48 | | 2021-11-28 00:02:00 | 47 | | 2021-11-27 00:03:00 | 47 | | 2021-11-26 00:04:00 | 47 | | 2021-11-25 00:05:00 | 47 | | 2021-11-24 00:06:00 | 47 | | 2021-11-23 00:07:00 | 47 | | 2021-11-22 00:08:00 | 47 | | 2021-11-21 00:09:00 | 46 | | 2021-11-20 00:10:00 | 46 | +---------------------+----------------------+
-
YEAR
-
Sintaxe
INT YEAR(DATETIME|TIMESTAMP|DATE|STRING <date>) -
Descrição
Retorna o ano em que um valor de date se encontra. Esta é uma função adicional do MaxCompute V2.0.
-
Parâmetros
date: obrigatório. Um valor de data dos tipos DATETIME, TIMESTAMP, DATE ou STRING. O valor de entrada deve estar no formato
yyyy-mm-dd,yyyy-mm-dd hh:mi:ssouyyyy-mm-dd hh:mi:ss:ff3. Se o valor for do tipo STRING, ele deve incluir pelo menos a parteyyyy-mm-dde não pode conter strings extras. -
Valor de retorno
Um valor do tipo INT é retornado. O valor de retorno varia conforme as seguintes regras:
Se o valor de date não for dos tipos DATETIME, TIMESTAMP, DATE ou STRING, ou se o formato não atender aos requisitos, null será retornado.
Se o valor de date for nulo, null será retornado.
-
Exemplos
-
Exemplos com dados estáticos
-- The return value is 1970. SELECT YEAR('1970-01-01 12:30:00'); -- The return value is 1970. SELECT YEAR('1970-01-01'); -- The return value is 70. SELECT YEAR('70-01-01'); -- The return value is NULL. SELECT YEAR('1970/03/09'); -- The return value is NULL. SELECT YEAR(null); -
Exemplos com dados de tabela
Obtenha o ano em que cada valor de data nas colunas date1, datetime1, timestamp1 e date3 se encontra. Este exemplo utiliza os dados em Dados de amostra. Instrução de exemplo:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. SET odps.sql.type.system.odps2=true; SELECT date1, YEAR(date1) AS date1_year, datetime1, YEAR(datetime1) AS datetime1_year, timestamp1, YEAR(timestamp1) AS timestamp1_year, date3, YEAR(date3) AS date3_year FROM mf_date_fun_t;O seguinte resultado é retornado.
+------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+ | date1 | date1_year | datetime1 | datetime1_year | timestamp1 | timestamp1_year | date3 | date3_year | +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+ | 2021-11-29 | 2021 | 2021-11-29 00:01:00 | 2021 | 2021-01-11 00:00:00.123456789 | 2021 | 2021-11-20 | 2021 | | 2021-11-28 | 2021 | 2021-11-28 00:02:00 | 2021 | 2021-02-11 00:00:00.123456789 | 2021 | 2021-11-21 | 2021 | | 2021-11-27 | 2021 | 2021-11-27 00:03:00 | 2021 | 2021-03-11 00:00:00.123456789 | 2021 | 2021-11-22 | 2021 | | 2021-11-26 | 2021 | 2021-11-26 00:04:00 | 2021 | 2021-04-11 00:00:00.123456789 | 2021 | 2021-11-23 | 2021 | | 2021-11-25 | 2021 | 2021-11-25 00:05:00 | 2021 | 2021-05-11 00:00:00.123456789 | 2021 | 2021-11-24 | 2021 | | 2021-11-24 | 2021 | 2021-11-24 00:06:00 | 2021 | 2021-06-11 00:00:00.123456789 | 2021 | 2021-11-25 | 2021 | | 2021-11-23 | 2021 | 2021-11-23 00:07:00 | 2021 | 2021-07-11 00:00:00.123456789 | 2021 | 2021-11-26 | 2021 | | 2021-11-22 | 2021 | 2021-11-22 00:08:00 | 2021 | 2021-08-11 00:00:00.123456789 | 2021 | 2021-11-27 | 2021 | | 2021-11-21 | 2021 | 2021-11-21 00:09:00 | 2021 | 2021-09-11 00:00:00.123456789 | 2021 | 2021-11-28 | 2021 | | 2021-11-20 | 2021 | 2021-11-20 00:10:00 | 2021 | 2021-10-11 00:00:00.123456789 | 2021 | 2021-11-29 | 2021 | +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
-
Referências
Se as funções integradas anteriores não atenderem aos seus requisitos de negócios, o MaxCompute também oferece suporte a funções definidas pelo usuário (UDFs). Para obter mais informações sobre UDFs, consulte Visão geral.
-
Para obter mais informações sobre perguntas frequentes relacionadas ao MaxCompute SQL, consulte os seguintes tópicos:
-
Para obter mais informações sobre erros comuns e perguntas frequentes sobre funções integradas do MaxCompute, consulte os seguintes tópicos: